Documentation Source Text

Hex Artifact Content
Login

Artifact 6f90689151c290dcbcc62544a4b86215e5b0ae4e:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c 65 74  ..<p>The complet
0140: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0150: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
0160: 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61 69 6e   usually.contain
0170: 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  ed a single file
0180: 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65 64 20   on disk called 
0190: 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61 62 61  the "main databa
01a0: 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c  se file".</p>..<
01b0: 70 3e 44 75 72 69 6e 67 20 61 20 74 72 61 6e 73  p>During a trans
01c0: 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20 73  action, SQLite s
01d0: 74 6f 72 65 73 20 61 64 64 69 74 69 6f 6e 61 6c  tores additional
01e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 0a 69 6e   information .in
01f0: 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65 20 63   a second file c
0200: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c 6c 62  alled the "rollb
0210: 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2c 20 6f 72  ack journal", or
0220: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
0230: 0a 5b 57 41 4c 20 6d 6f 64 65 5d 2c 20 61 20 77  .[WAL mode], a w
0240: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
0250: 69 6c 65 2e 0a 49 66 20 74 68 65 20 61 70 70 6c  ile..If the appl
0260: 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20  ication or.host 
0270: 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73  computer crashes
0280: 20 62 65 66 6f 72 65 20 74 68 65 20 74 72 61 6e   before the tran
0290: 73 61 63 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65  saction complete
02a0: 73 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c  s, then the roll
02b0: 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
02c0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
02d0: 63 6f 6e 74 61 69 6e 73 20 63 72 69 74 69 63 61  contains critica
02e0: 6c 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  l state informat
02f0: 69 6f 6e 20 6e 65 65 64 65 64 20 0a 74 6f 20 72  ion needed .to r
0300: 65 73 74 6f 72 65 20 74 68 65 20 6d 61 69 6e 20  estore the main 
0310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
0320: 20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   a consistent st
0330: 61 74 65 2e 20 20 57 68 65 6e 20 61 20 72 6f 6c  ate.  When a rol
0340: 6c 62 61 63 6b 20 0a 6a 6f 75 72 6e 61 6c 20 6f  lback .journal o
0350: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
0360: 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  g contains infor
0370: 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79  mation necessary
0380: 20 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20   for recovering 
0390: 0a 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68  .the state of th
03a0: 65 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 79  e database, they
03b0: 20 61 72 65 20 63 61 6c 6c 65 64 20 61 20 22 68   are called a "h
03c0: 6f 74 20 6a 6f 75 72 6e 61 6c 22 20 6f 72 20 22  ot journal" or "
03d0: 68 6f 74 20 57 41 4c 20 66 69 6c 65 22 2e 0a 48  hot WAL file"..H
03e0: 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 61 6e 64 20  ot journals and 
03f0: 57 41 4c 20 66 69 6c 65 73 20 61 72 65 20 6f 6e  WAL files are on
0400: 6c 79 20 61 20 66 61 63 74 6f 72 20 64 75 72 69  ly a factor duri
0410: 6e 67 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72  ng error recover
0420: 79 0a 73 63 65 6e 61 72 69 6f 73 20 61 6e 64 20  y.scenarios and 
0430: 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c  so are uncommon,
0440: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61   but they are pa
0450: 72 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20  rt of the state 
0460: 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74  of an SQLite.dat
0470: 61 62 61 73 65 20 61 6e 64 20 73 6f 20 63 61 6e  abase and so can
0480: 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20  not be ignored. 
0490: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64   This document d
04a0: 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
04b0: 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20  t.of a rollback 
04c0: 6a 6f 75 72 6e 61 6c 20 61 6e 64 20 74 68 65 20  journal and the 
04d0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
04e0: 66 69 6c 65 2c 20 62 75 74 20 74 68 65 20 66 6f  file, but the fo
04f0: 63 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d 61  cus is.on the ma
0500: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
0510: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20 50  .</p>..<h3>1.1 P
0520: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ages</h3>..<p>Th
0530: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
0540: 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  file consists of
0550: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67   one or more pag
0560: 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  es.  ^The size o
0570: 66 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f  f a.page is a po
0580: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
0590: 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36  en 512 and 65536
05a0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c   inclusive.  All
05b0: 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68   pages within.th
05c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
05d0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a  are the same siz
05e0: 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69  e.  ^The page si
05f0: 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ze for a databas
0600: 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d  e file.is determ
0610: 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79  ined by the 2-by
0620: 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74  te integer locat
0630: 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  ed at an offset 
0640: 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d  of.16 bytes from
0650: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0660: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
0670: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67  ile.</p>..<p>Pag
0680: 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20  es are numbered 
0690: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
06a0: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  .  The maximum p
06b0: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31  age number is.21
06c0: 34 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e  47483646 (2<sup>
06d0: 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c  <small>31</small
06e0: 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54  ></sup> - 2).  T
06f0: 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a  he minimum size.
0700: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0710: 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d  is a single 512-
0720: 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d  byte page..The m
0730: 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61  aximum size data
0740: 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31  base would be 21
0750: 34 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61  47483646 pages a
0760: 74 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65  t 65536 bytes pe
0770: 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33  r.page or 140,73
0780: 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79  7,488,224,256 by
0790: 74 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74  tes (about 140 t
07a0: 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61  erabytes).  Usua
07b0: 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  lly SQLite will.
07c0: 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  hit the maximum 
07d0: 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  file size limit 
07e0: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
07f0: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20  g filesystem or 
0800: 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69  disk.hardware si
0810: 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65  ze limit long be
0820: 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73  fore it hits its
0830: 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69   own internal si
0840: 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c  ze limit.</p>..<
0850: 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c  p>In common use,
0860: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
0870: 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20  s tend to range 
0880: 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66  in size from a f
0890: 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20  ew kilobytes.to 
08a0: 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e  a few gigabytes.
08b0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
08c0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
08d0: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
08e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
08f0: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
0900: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
0910: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
0920: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
0930: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
0940: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0950: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0960: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0970: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0980: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0990: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
09a0: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
09b0: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
09c0: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
09d0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
09e0: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
09f0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0a00: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0a10: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0a20: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0a30: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0a40: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0a50: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0a60: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72  .</p>..<p>^All r
0a70: 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72  eads from and wr
0a80: 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e  ites to the main
0a90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
0aa0: 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62  egin at a page.b
0ab0: 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20  oundary and all 
0ac0: 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e  writes are an in
0ad0: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
0ae0: 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20  pages in size.  
0af0: 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20  ^Reads.are also 
0b00: 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67  usually an integ
0b10: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  er number of pag
0b20: 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68  es in size, with
0b30: 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69   the one excepti
0b40: 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65  on.that when the
0b50: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
0b60: 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66  st opened, the f
0b70: 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f  irst 100 bytes o
0b80: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
0b90: 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73  ile (the databas
0ba0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61  e file header) a
0bb0: 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62  re read as a sub
0bc0: 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e  -page size unit.
0bd0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65  </p>..<p>^Before
0be0: 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   any information
0bf0: 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66  -bearing page of
0c00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0c10: 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20   modified, .the 
0c20: 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66  original unmodif
0c30: 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  ied content of t
0c40: 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74  hat page is writ
0c50: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f  ten into the .ro
0c60: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
0c70: 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   If a transactio
0c80: 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  n is interrupted
0c90: 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65   and needs to be
0ca0: 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74   .rolled back, t
0cb0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
0cc0: 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20  nal can then be 
0cd0: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
0ce0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
0cf0: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61  its original sta
0d00: 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c  te.  ^Freelist l
0d10: 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e  eaf pages bear n
0d20: 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  o.information th
0d30: 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f  at would need to
0d40: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20   be restored on 
0d50: 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  a rollback and s
0d60: 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77  o they.are not w
0d70: 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f  ritten to the jo
0d80: 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d  urnal prior to m
0d90: 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20  odification, in 
0da0: 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20  order to.reduce 
0db0: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
0dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0dd0: 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20  database_header 
0de0: 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72  {database header
0df0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20  }</tcl>.<h3>1.2 
0e00: 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61  The Database Hea
0e10: 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  der</h3>..<p>The
0e20: 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73   first 100 bytes
0e30: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0e40: 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74   file comprise t
0e50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0e60: 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64   .header.  The d
0e70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
0e80: 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69  der is divided i
0e90: 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68  nto fields as sh
0ea0: 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65  own by.the table
0eb0: 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c   below.  All mul
0ec0: 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e  tibyte fields in
0ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0ee0: 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74  le header are.st
0ef0: 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 6f  ored with the mo
0f00: 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  st significant b
0f10: 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65  yte first (big-e
0f20: 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65  ndian).</p>..<ce
0f30: 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73  nter>.<i>Databas
0f40: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
0f50: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
0f60: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
0f70: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
0f80: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
0f90: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
0fa0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fb0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
0fc0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
0fd0: 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c  =center>16<td al
0fe0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65  ign=left>.The he
0ff0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51  ader string: "SQ
1000: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30  Lite format 3\00
1010: 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0".<tr><td valig
1020: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1030: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
1040: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1050: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
1060: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70  >.The database p
1070: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
1080: 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f  s.  Must be a po
1090: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
10a0: 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38  en 512.and 32768
10b0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74   inclusive, or t
10c0: 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65  he value 1 repre
10d0: 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73  senting a page s
10e0: 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74  ize of 65536..<t
10f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1100: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38   align=center>18
1110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1130: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1140: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1150: 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c  ersion.  1 for l
1160: 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41  egacy; 2 for [WA
1170: 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  L]..<tr><td vali
1180: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1190: 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e  ter>19<td valign
11a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11b0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
11c0: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72  t>.File format r
11d0: 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ead version.  1 
11e0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
11f0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
1200: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1210: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
1220: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1230: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1240: 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66  n=left>.Bytes of
1250: 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65   unused "reserve
1260: 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20  d" space at the 
1270: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
1280: 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74  .  Usually 0..<t
1290: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31   align=center>21
12b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78   align=left>.Max
12e0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
12f0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
1300: 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72   Must be 64..<tr
1310: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c  align=center>22<
1330: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1340: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1350: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69  align=left>.Mini
1360: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
1370: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1380: 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e  Must be 32..<tr>
1390: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74  lign=center>23<t
13b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
13d0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20  lign=left>.Leaf 
13e0: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
13f0: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1420: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1430: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1440: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1450: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
1460: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
1470: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1480: 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
1490: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14a0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
14b0: 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61  >.Size of the da
14c0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
14d0: 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68  ages.  The "in-h
14e0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
14f0: 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ize"..<tr><td va
1500: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1510: 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69  enter>32<td vali
1520: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1530: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1540: 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72  eft>.Page number
1550: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
1560: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
1570: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1580: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1590: 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>36<td valign=
15a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
15b0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
15c0: 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  >.Total number o
15d0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
15e0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
15f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1600: 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>40<td valign=t
1610: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1620: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1630: 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .The schema cook
1640: 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ie..<tr><td vali
1650: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1660: 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e  ter>44<td valign
1670: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1680: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1690: 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  t>.The schema fo
16a0: 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75  rmat number.  Su
16b0: 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66  pported schema f
16c0: 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c  ormats are 1, 2,
16d0: 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c   3, and 4..<tr><
16e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64  ign=center>48<td
1700: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1710: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1720: 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c  ign=left>.Defaul
1730: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1740: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1750: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1760: 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>52<td valign=
1770: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1780: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1790: 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  >.The page numbe
17a0: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
17b0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
17c0: 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76  e when in auto-v
17d0: 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65  acuum or.increme
17e0: 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65  ntal-vacuum mode
17f0: 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72  s, or zero other
1800: 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  wise..<tr><td va
1810: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1820: 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69  enter>56<td vali
1830: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1840: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1850: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1860: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1870: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d    A value of 1 m
1880: 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76  eans UTF-8.  A v
1890: 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20  alue of 2.means 
18a0: 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c  UTF-16le.  A val
18b0: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
18c0: 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20  F-16be..<tr><td 
18d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18e0: 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61  =center>60<td va
18f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1900: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1910: 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72  =left>.The "user
1920: 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61   version" as rea
1930: 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65  d and set by the
1940: 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70   [user_version p
1950: 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20  ragma]..<tr><td 
1960: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1970: 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61  =center>64<td va
1980: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1990: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
19a0: 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e  =left>.True (non
19b0: 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65  -zero) for incre
19c0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
19d0: 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f  de.  False (zero
19e0: 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  ) otherwise..<tr
19f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1a00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c  align=center>68<
1a10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1a20: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a40: 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22  "Application ID"
1a50: 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41 20   set by [PRAGMA 
1a60: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 2e  application_id].
1a70: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1a80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1a90: 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >72<td valign=to
1aa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1ab0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
1ac0: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1ad0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1ae0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1af0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b00: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1b10: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1b20: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1b30: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1b40: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1b50: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><td v
1b60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b70: 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61 6c  center>96<td val
1b80: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b90: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1ba0: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1bb0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1bc0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1bd0: 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63  .<h4>1.2.1 Magic
1be0: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1bf0: 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h4>..<p>^Every v
1c00: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1c10: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1c20: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1c30: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1c40: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1c50: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1c60: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1c70: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1c80: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1c90: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1ca0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1cb0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1cc0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1cd0: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1ce0: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1cf0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32  .</p>..<h4>1.2.2
1d00: 20 50 61 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a   Page Size</h4>.
1d10: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1d20: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1d30: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1d40: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1d50: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1d60: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1d70: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1d80: 37 2e 30 2e 31 20 61 6e 64 20 65 61 72 6c 69 65  7.0.1 and earlie
1d90: 72 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  r, this value is
1da0: 20 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   .interpreted as
1db0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e   a big-endian in
1dc0: 74 65 67 65 72 20 61 6e 64 20 6d 75 73 74 20 62  teger and must b
1dd0: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1de0: 20 62 65 74 77 65 65 6e 0a 35 31 32 20 61 6e 64   between.512 and
1df0: 20 33 32 37 36 38 2c 20 69 6e 63 6c 75 73 69 76   32768, inclusiv
1e00: 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69  e.  Beginning wi
1e10: 74 68 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  th SQLite versio
1e20: 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a  n 3.7.1, a page.
1e30: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 20 62 79  size of 65536 by
1e40: 74 65 73 20 69 73 20 73 75 70 70 6f 72 74 65 64  tes is supported
1e50: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 36 35 35  .  The value 655
1e60: 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20  36 will not fit 
1e70: 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e  in a.two-byte in
1e80: 74 65 67 65 72 2c 20 73 6f 20 74 6f 20 73 70 65  teger, so to spe
1e90: 63 69 66 79 20 61 20 36 35 35 33 36 2d 62 79 74  cify a 65536-byt
1ea0: 65 20 70 61 67 65 20 73 69 7a 65 2c 20 74 68 65  e page size, the
1eb0: 20 76 61 6c 75 65 20 69 73 0a 61 74 20 6f 66 66   value is.at off
1ec0: 73 65 74 20 31 36 20 69 73 20 30 78 30 30 20 30  set 16 is 0x00 0
1ed0: 78 30 31 2e 0a 54 68 69 73 20 76 61 6c 75 65 20  x01..This value 
1ee0: 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
1ef0: 65 64 20 61 73 20 61 20 62 69 67 2d 65 6e 64 69  ed as a big-endi
1f00: 61 6e 0a 31 20 61 6e 64 20 74 68 6f 75 67 68 74  an.1 and thought
1f10: 20 6f 66 20 69 73 20 61 73 20 61 20 6d 61 67 69   of is as a magi
1f20: 63 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 70 72  c number to repr
1f30: 65 73 65 6e 74 20 74 68 65 20 36 35 35 33 36 20  esent the 65536 
1f40: 70 61 67 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e  page size..Or on
1f50: 65 20 63 61 6e 20 76 69 65 77 20 74 68 65 20 74  e can view the t
1f60: 77 6f 2d 62 79 74 65 20 66 69 65 6c 64 20 61 73  wo-byte field as
1f70: 20 61 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e   a little endian
1f80: 20 6e 75 6d 62 65 72 20 61 6e 64 20 73 61 79 0a   number and say.
1f90: 74 68 61 74 20 69 74 20 72 65 70 72 65 73 65 6e  that it represen
1fa0: 74 73 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  ts the page size
1fb0: 20 64 69 76 69 64 65 64 20 62 79 20 32 35 36 2e   divided by 256.
1fc0: 20 20 54 68 65 73 65 20 74 77 6f 20 0a 69 6e 74    These two .int
1fd0: 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20  erpretations of 
1fe0: 74 68 65 20 70 61 67 65 2d 73 69 7a 65 20 66 69  the page-size fi
1ff0: 65 6c 64 20 61 72 65 20 65 71 75 69 76 61 6c 65  eld are equivale
2000: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  nt.</p>..<h4>1.2
2010: 2e 33 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 76  .3 File format v
2020: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f  ersion numbers</
2030: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65  h4>..<p>The file
2040: 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76 65   format write ve
2050: 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66  rsion and file f
2060: 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72 73 69  ormat read versi
2070: 6f 6e 20 61 74 20 6f 66 66 73 65 74 73 0a 31 38  on at offsets.18
2080: 20 61 6e 64 20 31 39 20 61 72 65 20 69 6e 74 65   and 19 are inte
2090: 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f  nded to allow fo
20a0: 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f  r enhancements o
20b0: 66 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  f the file forma
20c0: 74 0a 69 6e 20 66 75 74 75 72 65 20 76 65 72 73  t.in future vers
20d0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 20  ions of SQLite. 
20e0: 20 49 6e 20 63 75 72 72 65 6e 74 20 76 65 72 73   In current vers
20f0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20  ions of SQLite, 
2100: 62 6f 74 68 20 6f 66 0a 74 68 65 73 65 20 76 61  both of.these va
2110: 6c 75 65 73 20 61 72 65 20 31 20 66 6f 72 20 72  lues are 1 for r
2120: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c  ollback journall
2130: 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64 20 32 20  ing modes and 2 
2140: 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61  for [WAL].journa
2150: 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20  lling mode.  If 
2160: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  a version of SQL
2170: 69 74 65 20 63 6f 64 65 64 20 74 6f 20 74 68 65  ite coded to the
2180: 20 63 75 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f   current.file fo
2190: 72 6d 61 74 20 73 70 65 63 69 66 69 63 61 74 69  rmat specificati
21a0: 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20  on encounters a 
21b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
21c0: 65 72 65 20 74 68 65 20 72 65 61 64 0a 76 65 72  ere the read.ver
21d0: 73 69 6f 6e 20 69 73 20 31 20 6f 72 20 32 20 62  sion is 1 or 2 b
21e0: 75 74 20 74 68 65 20 77 72 69 74 65 20 76 65 72  ut the write ver
21f0: 73 69 6f 6e 20 69 73 20 67 72 65 61 74 65 72 20  sion is greater 
2200: 74 68 61 6e 20 32 2c 20 74 68 65 6e 20 74 68 65  than 2, then the
2210: 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 6d   database.file m
2220: 75 73 74 20 62 65 20 74 72 65 61 74 65 64 20 61  ust be treated a
2230: 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66  s read-only.  If
2240: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
2250: 20 77 69 74 68 20 61 20 72 65 61 64 20 76 65 72   with a read ver
2260: 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74 68 61  sion.greater tha
2270: 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  n 2 is encounter
2280: 65 64 2c 20 74 68 65 6e 20 74 68 61 74 20 64 61  ed, then that da
2290: 74 61 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65  tabase cannot be
22a0: 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
22b0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34  .</p>..<h4>1.2.4
22c0: 20 52 65 73 65 72 76 65 64 20 62 79 74 65 73 20   Reserved bytes 
22d0: 70 65 72 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c  per page</h4>..<
22e0: 70 3e 53 51 4c 69 74 65 20 68 61 73 20 74 68 65  p>SQLite has the
22f0: 20 61 62 69 6c 69 74 79 20 74 6f 20 73 65 74 20   ability to set 
2300: 61 73 69 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75  aside a small nu
2310: 6d 62 65 72 20 6f 66 20 65 78 74 72 61 20 62 79  mber of extra by
2320: 74 65 73 20 61 74 0a 74 68 65 20 65 6e 64 20 6f  tes at.the end o
2330: 66 20 65 76 65 72 79 20 70 61 67 65 20 66 6f 72  f every page for
2340: 20 75 73 65 20 62 79 20 65 78 74 65 6e 73 69 6f   use by extensio
2350: 6e 73 2e 20 20 54 68 65 73 65 20 65 78 74 72 61  ns.  These extra
2360: 20 62 79 74 65 73 20 61 72 65 0a 75 73 65 64 2c   bytes are.used,
2370: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 62 79   for example, by
2380: 20 74 68 65 20 53 51 4c 69 74 65 20 45 6e 63 72   the SQLite Encr
2390: 79 70 74 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e  yption Extension
23a0: 20 74 6f 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63   to store a nonc
23b0: 65 0a 61 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67  e.and/or cryptog
23c0: 72 61 70 68 69 63 20 63 68 65 63 6b 73 75 6d 20  raphic checksum 
23d0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
23e0: 65 61 63 68 20 70 61 67 65 2e 20 20 5e 54 68 65  each page.  ^The
23f0: 20 0a 22 72 65 73 65 72 76 65 64 20 73 70 61 63   ."reserved spac
2400: 65 22 20 73 69 7a 65 20 69 6e 20 74 68 65 20 31  e" size in the 1
2410: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
2420: 20 6f 66 66 73 65 74 20 32 30 20 69 73 20 74 68   offset 20 is th
2430: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65  e number.of byte
2440: 73 20 6f 66 20 73 70 61 63 65 20 61 74 20 74 68  s of space at th
2450: 65 20 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61  e end of each pa
2460: 67 65 20 74 6f 20 72 65 73 65 72 76 65 20 66 6f  ge to reserve fo
2470: 72 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68  r extensions..Th
2480: 69 73 20 76 61 6c 75 65 20 69 73 20 75 73 75 61  is value is usua
2490: 6c 6c 79 20 30 2e 20 20 54 68 65 20 76 61 6c 75  lly 0.  The valu
24a0: 65 20 63 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70  e can be odd.</p
24b0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
24c0: 65 6e 74 20 75 73 61 62 6c 65 5f 73 69 7a 65 20  ent usable_size 
24d0: 7b 75 73 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74  {usable size}</t
24e0: 63 6c 3e 0a 3c 70 3e 54 68 65 20 22 75 73 61 62  cl>.<p>The "usab
24f0: 6c 65 20 73 69 7a 65 22 20 6f 66 20 61 20 64 61  le size" of a da
2500: 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20 74  tabase page is t
2510: 68 65 20 70 61 67 65 20 73 69 7a 65 20 73 70 65  he page size spe
2520: 63 69 66 79 20 62 79 20 74 68 65 0a 32 2d 62 79  cify by the.2-by
2530: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
2540: 66 73 65 74 20 31 36 20 69 6e 20 74 68 65 20 68  fset 16 in the h
2550: 65 61 64 65 72 20 6c 65 73 73 20 74 68 65 20 22  eader less the "
2560: 72 65 73 65 72 76 65 64 22 20 73 70 61 63 65 20  reserved" space 
2570: 73 69 7a 65 0a 72 65 63 6f 72 64 65 64 20 69 6e  size.recorded in
2580: 20 74 68 65 20 31 2d 62 79 74 65 20 69 6e 74 65   the 1-byte inte
2590: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 30  ger at offset 20
25a0: 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20   in the header. 
25b0: 20 54 68 65 20 75 73 61 62 6c 65 0a 73 69 7a 65   The usable.size
25c0: 20 6f 66 20 61 20 70 61 67 65 20 6d 69 67 68 74   of a page might
25d0: 20 62 65 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65   be an odd numbe
25e0: 72 2e 20 20 5e 28 48 6f 77 65 76 65 72 2c 20 74  r.  ^(However, t
25f0: 68 65 20 75 73 61 62 6c 65 20 73 69 7a 65 20 69  he usable size i
2600: 73 20 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f  s not.allowed to
2610: 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 34 38   be less than 48
2620: 30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  0.  In other wor
2630: 64 73 2c 20 69 66 20 74 68 65 20 70 61 67 65 20  ds, if the page 
2640: 73 69 7a 65 20 69 73 20 35 31 32 2c 0a 74 68 65  size is 512,.the
2650: 6e 20 74 68 65 20 72 65 73 65 72 76 65 64 20 73  n the reserved s
2660: 70 61 63 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74  pace size cannot
2670: 20 65 78 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70   exceed 32.)^</p
2680: 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79  >..<h4>1.2.5 Pay
2690: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f  load fractions</
26a0: 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78  h4>..<p>^The max
26b0: 69 6d 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d  imum and minimum
26c0: 20 65 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61   embedded payloa
26d0: 64 20 66 72 61 63 74 69 6f 6e 73 20 61 6e 64 20  d fractions and 
26e0: 74 68 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64  the leaf.payload
26f0: 20 66 72 61 63 74 69 6f 6e 20 76 61 6c 75 65 73   fraction values
2700: 20 6d 75 73 74 20 62 65 20 36 34 2c 20 33 32 2c   must be 64, 32,
2710: 20 61 6e 64 20 33 32 2e 20 20 54 68 65 73 65 20   and 32.  These 
2720: 76 61 6c 75 65 73 20 77 65 72 65 0a 6f 72 69 67  values were.orig
2730: 69 6e 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20  inally intended 
2740: 74 6f 20 62 65 20 74 75 6e 61 62 6c 65 20 70 61  to be tunable pa
2750: 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 63 6f  rameters that co
2760: 75 6c 64 20 62 65 20 75 73 65 64 20 74 6f 0a 6d  uld be used to.m
2770: 6f 64 69 66 79 20 74 68 65 20 73 74 6f 72 61 67  odify the storag
2780: 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
2790: 62 2d 74 72 65 65 20 61 6c 67 6f 72 69 74 68 6d  b-tree algorithm
27a0: 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 61 74  .  However, that
27b0: 0a 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69  .functionality i
27c0: 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  s not supported 
27d0: 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 6e 6f  and there are no
27e0: 20 63 75 72 72 65 6e 74 20 70 6c 61 6e 73 20 74   current plans t
27f0: 6f 20 61 64 64 0a 73 75 70 70 6f 72 74 20 69 6e  o add.support in
2800: 20 74 68 65 20 66 75 74 75 72 65 2e 20 20 48 65   the future.  He
2810: 6e 63 65 2c 20 74 68 65 73 65 20 74 68 72 65 65  nce, these three
2820: 20 62 79 74 65 73 20 61 72 65 20 66 69 78 65 64   bytes are fixed
2830: 20 61 74 20 74 68 65 0a 76 61 6c 75 65 73 20 73   at the.values s
2840: 70 65 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c  pecified.</p>..<
2850: 68 34 3e 31 2e 32 2e 36 20 46 69 6c 65 20 63 68  h4>1.2.6 File ch
2860: 61 6e 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34  ange counter</h4
2870: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
2880: 65 6e 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61  ent chngctr {cha
2890: 6e 67 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63  nge counter}</tc
28a0: 6c 3e 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20  l>.<p>^The file 
28b0: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
28c0: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
28d0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68  ndian integer wh
28e0: 69 63 68 20 69 73 0a 69 6e 63 72 65 6d 65 6e 74  ich is.increment
28f0: 65 64 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ed whenever the 
2900: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
2910: 20 75 6e 6c 6f 63 6b 65 64 20 61 66 74 65 72 20   unlocked after 
2920: 68 61 76 69 6e 67 0a 62 65 65 6e 20 6d 6f 64 69  having.been modi
2930: 66 69 65 64 2e 0a 57 68 65 6e 20 74 77 6f 20 6f  fied..When two o
2940: 72 20 6d 6f 72 65 20 70 72 6f 63 65 73 73 65 73  r more processes
2950: 20 61 72 65 20 72 65 61 64 69 6e 67 20 74 68 65   are reading the
2960: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 66   same database f
2970: 69 6c 65 2c 20 65 61 63 68 20 0a 70 72 6f 63 65  ile, each .proce
2980: 73 73 20 63 61 6e 20 64 65 74 65 63 74 20 64 61  ss can detect da
2990: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 66  tabase changes f
29a0: 72 6f 6d 20 6f 74 68 65 72 20 70 72 6f 63 65 73  rom other proces
29b0: 73 65 73 20 62 79 20 6d 6f 6e 69 74 6f 72 69 6e  ses by monitorin
29c0: 67 20 0a 74 68 65 20 63 68 61 6e 67 65 20 63 6f  g .the change co
29d0: 75 6e 74 65 72 2e 0a 41 20 70 72 6f 63 65 73 73  unter..A process
29e0: 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77   will normally w
29f0: 61 6e 74 20 74 6f 20 66 6c 75 73 68 20 69 74 73  ant to flush its
2a00: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 63   database page c
2a10: 61 63 68 65 20 77 68 65 6e 0a 61 6e 6f 74 68 65  ache when.anothe
2a20: 72 20 70 72 6f 63 65 73 73 20 6d 6f 64 69 66 69  r process modifi
2a30: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  ed the database,
2a40: 20 73 69 6e 63 65 20 74 68 65 20 63 61 63 68 65   since the cache
2a50: 20 68 61 73 20 62 65 63 6f 6d 65 20 73 74 61 6c   has become stal
2a60: 65 2e 0a 54 68 65 20 66 69 6c 65 20 63 68 61 6e  e..The file chan
2a70: 67 65 20 63 6f 75 6e 74 65 72 20 66 61 63 69 6c  ge counter facil
2a80: 69 74 61 74 65 73 20 74 68 69 73 2e 3c 2f 70 3e  itates this.</p>
2a90: 0a 0a 3c 70 3e 49 6e 20 57 41 4c 20 6d 6f 64 65  ..<p>In WAL mode
2aa0: 2c 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  , changes to the
2ab0: 20 64 61 74 61 62 61 73 65 20 61 72 65 20 64 65   database are de
2ac0: 74 65 63 74 65 64 20 75 73 69 6e 67 20 74 68 65  tected using the
2ad0: 20 77 61 6c 2d 69 6e 64 65 78 0a 61 6e 64 20 73   wal-index.and s
2ae0: 6f 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  o the change cou
2af0: 6e 74 65 72 20 69 73 20 6e 6f 74 20 6e 65 65 64  nter is not need
2b00: 65 64 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 20  ed.  Hence, the 
2b10: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 6d  change counter m
2b20: 69 67 68 74 0a 6e 6f 74 20 62 65 20 69 6e 63 72  ight.not be incr
2b30: 65 6d 65 6e 74 65 64 20 6f 6e 20 65 61 63 68 20  emented on each 
2b40: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e 20 57  transaction in W
2b50: 41 4c 20 6d 6f 64 65 2e 3c 2f 70 3e 0a 0a 3c 68  AL mode.</p>..<h
2b60: 34 3e 31 2e 32 2e 37 20 49 6e 2d 68 65 61 64 65  4>1.2.7 In-heade
2b70: 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 3c  r database size<
2b80: 2f 68 34 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /h4>..<tcl>hd_fr
2b90: 61 67 6d 65 6e 74 20 66 69 6c 65 73 69 7a 65 20  agment filesize 
2ba0: 7b 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62  {in-header datab
2bb0: 61 73 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a  ase size}</tcl>.
2bc0: 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62  <p>^The 4-byte b
2bd0: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
2be0: 72 20 61 74 20 6f 66 66 73 65 74 20 32 38 20 69  r at offset 28 i
2bf0: 6e 74 6f 20 74 68 65 20 68 65 61 64 65 72 20 0a  nto the header .
2c00: 73 74 6f 72 65 73 20 74 68 65 20 73 69 7a 65 20  stores the size 
2c10: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2c20: 66 69 6c 65 20 69 6e 20 70 61 67 65 73 2e 20 20  file in pages.  
2c30: 5e 49 66 20 74 68 69 73 20 69 6e 2d 68 65 61 64  ^If this in-head
2c40: 65 72 0a 64 61 74 61 73 69 7a 65 20 73 69 7a 65  er.datasize size
2c50: 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 20 28 73   is not valid (s
2c60: 65 65 20 74 68 65 20 6e 65 78 74 20 70 61 72 61  ee the next para
2c70: 67 72 61 70 68 29 2c 20 74 68 65 6e 20 74 68 65  graph), then the
2c80: 20 64 61 74 61 62 61 73 65 20 0a 73 69 7a 65 20   database .size 
2c90: 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 6c  is computed by l
2ca0: 6f 6f 6b 69 6e 67 0a 61 74 20 74 68 65 20 61 63  ooking.at the ac
2cb0: 74 75 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65  tual size of the
2cc0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
2cd0: 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Older versions o
2ce0: 66 20 53 51 4c 69 74 65 0a 69 67 6e 6f 72 65 64  f SQLite.ignored
2cf0: 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64   the in-header d
2d00: 61 74 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64  atabase size and
2d10: 20 75 73 65 64 20 74 68 65 20 61 63 74 75 61 6c   used the actual
2d20: 20 66 69 6c 65 20 73 69 7a 65 0a 65 78 63 6c 75   file size.exclu
2d30: 73 69 76 65 6c 79 2e 20 20 5e 4e 65 77 65 72 20  sively.  ^Newer 
2d40: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
2d50: 74 65 20 75 73 65 20 74 68 65 20 69 6e 2d 68 65  te use the in-he
2d60: 61 64 65 72 20 64 61 74 61 62 61 73 65 0a 73 69  ader database.si
2d70: 7a 65 20 69 66 20 69 74 20 69 73 20 61 76 61 69  ze if it is avai
2d80: 6c 61 62 6c 65 20 62 75 74 20 66 61 6c 6c 20 62  lable but fall b
2d90: 61 63 6b 20 74 6f 20 74 68 65 20 61 63 74 75 61  ack to the actua
2da0: 6c 20 66 69 6c 65 20 73 69 7a 65 20 69 66 0a 74  l file size if.t
2db0: 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74  he in-header dat
2dc0: 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 6e 6f  abase size is no
2dd0: 74 20 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c 70  t valid.</p>..<p
2de0: 3e 5e 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20  >^The in-header 
2df0: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 69 73  database size is
2e00: 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64   only considered
2e10: 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66 0a   to be valid if.
2e20: 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61  it is non-zero a
2e30: 6e 64 20 69 66 20 74 68 65 20 34 2d 62 79 74 65  nd if the 4-byte
2e40: 20 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72   [change counter
2e50: 5d 20 61 74 20 6f 66 66 73 65 74 20 32 34 0a 65  ] at offset 24.e
2e60: 78 61 63 74 6c 79 20 6d 61 74 63 68 65 73 20 74  xactly matches t
2e70: 68 65 20 34 2d 62 79 74 65 20 5b 76 65 72 73 69  he 4-byte [versi
2e80: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
2e90: 62 65 72 5d 20 61 74 20 6f 66 66 73 65 74 20 39  ber] at offset 9
2ea0: 32 2e 0a 5e 28 54 68 65 20 69 6e 2d 68 65 61 64  2..^(The in-head
2eb0: 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65  er database size
2ec0: 20 69 73 20 61 6c 77 61 79 73 20 76 61 6c 69 64   is always valid
2ed0: 20 0a 77 68 65 6e 20 74 68 65 20 64 61 74 61 62   .when the datab
2ee0: 61 73 65 20 69 73 20 6f 6e 6c 79 20 6d 6f 64 69  ase is only modi
2ef0: 66 69 65 64 20 75 73 69 6e 67 20 72 65 63 65 6e  fied using recen
2f00: 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  t versions of SQ
2f10: 4c 69 74 65 0a 28 76 65 72 73 69 6f 6e 73 20 33  Lite.(versions 3
2f20: 2e 37 2e 30 20 61 6e 64 20 6c 61 74 65 72 29 2e  .7.0 and later).
2f30: 29 5e 0a 49 66 20 61 20 6c 65 67 61 63 79 20 76  )^.If a legacy v
2f40: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
2f50: 20 77 72 69 74 65 73 20 74 6f 20 74 68 65 20 64   writes to the d
2f60: 61 74 61 62 61 73 65 2c 20 69 74 20 77 69 6c 6c  atabase, it will
2f70: 20 6e 6f 74 0a 6b 6e 6f 77 20 74 6f 20 75 70 64   not.know to upd
2f80: 61 74 65 20 74 68 65 20 69 6e 2d 68 65 61 64 65  ate the in-heade
2f90: 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20  r database size 
2fa0: 61 6e 64 20 73 6f 20 74 68 65 20 69 6e 2d 68 65  and so the in-he
2fb0: 61 64 65 72 0a 64 61 74 61 62 61 73 65 20 73 69  ader.database si
2fc0: 7a 65 20 63 6f 75 6c 64 20 62 65 20 69 6e 63 6f  ze could be inco
2fd0: 72 72 65 63 74 2e 20 20 42 75 74 20 6c 65 67 61  rrect.  But lega
2fe0: 63 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  cy versions of S
2ff0: 51 4c 69 74 65 0a 77 69 6c 6c 20 61 6c 73 6f 20  QLite.will also 
3000: 6c 65 61 76 65 20 74 68 65 20 76 65 72 73 69 6f  leave the versio
3010: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
3020: 65 72 20 61 74 20 6f 66 66 73 65 74 20 39 32 20  er at offset 92 
3030: 75 6e 63 68 61 6e 67 65 64 0a 73 6f 20 69 74 20  unchanged.so it 
3040: 77 69 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20 74  will not match t
3050: 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65  he change-counte
3060: 72 2e 20 20 48 65 6e 63 65 2c 20 69 6e 76 61 6c  r.  Hence, inval
3070: 69 64 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74  id in-header.dat
3080: 61 62 61 73 65 20 73 69 7a 65 73 20 63 61 6e 20  abase sizes can 
3090: 62 65 20 64 65 74 65 63 74 65 64 20 28 61 6e 64  be detected (and
30a0: 20 69 67 6e 6f 72 65 64 29 20 62 79 20 6f 62 73   ignored) by obs
30b0: 65 72 76 69 6e 67 20 77 68 65 6e 0a 74 68 65 20  erving when.the 
30c0: 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20 64  change-counter d
30d0: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 74 68  oes not match th
30e0: 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d  e version-valid-
30f0: 66 6f 72 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a  for number.</p>.
3100: 0a 3c 68 34 3e 31 2e 32 2e 38 20 46 72 65 65 20  .<h4>1.2.8 Free 
3110: 70 61 67 65 20 6c 69 73 74 3c 2f 68 34 3e 0a 0a  page list</h4>..
3120: 3c 70 3e 55 6e 75 73 65 64 20 70 61 67 65 73 20  <p>Unused pages 
3130: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
3140: 66 69 6c 65 20 61 72 65 20 73 74 6f 72 65 64 20  file are stored 
3150: 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 2e 20 20  on a freelist.  
3160: 5e 54 68 65 0a 34 2d 62 79 74 65 20 62 69 67 2d  ^The.4-byte big-
3170: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
3180: 74 20 6f 66 66 73 65 74 20 33 32 20 73 74 6f 72  t offset 32 stor
3190: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
31a0: 65 72 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20  er of.the first 
31b0: 70 61 67 65 20 6f 66 20 74 68 65 20 66 72 65 65  page of the free
31c0: 6c 69 73 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66  list, or zero if
31d0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 69 73   the freelist is
31e0: 20 65 6d 70 74 79 2e 0a 5e 54 68 65 20 34 2d 62   empty..^The 4-b
31f0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3200: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3210: 20 33 36 20 73 74 6f 72 65 73 20 73 74 6f 72 65   36 stores store
3220: 73 20 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75 6d  s the total .num
3230: 62 65 72 20 6f 66 20 70 61 67 65 73 20 6f 6e 20  ber of pages on 
3240: 74 68 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f 70  the freelist.</p
3250: 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 39 20 53 63 68  >..<h4>1.2.9 Sch
3260: 65 6d 61 20 63 6f 6f 6b 69 65 3c 2f 68 34 3e 0a  ema cookie</h4>.
3270: 0a 3c 70 3e 5e 54 68 65 20 73 63 68 65 6d 61 20  .<p>^The schema 
3280: 63 6f 6f 6b 69 65 20 69 73 20 61 20 34 2d 62 79  cookie is a 4-by
3290: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
32a0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
32b0: 34 30 0a 74 68 61 74 20 69 73 20 69 6e 63 72 65  40.that is incre
32c0: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 20  mented whenever 
32d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
32e0: 65 6d 61 20 63 68 61 6e 67 65 73 2e 20 20 41 20  ema changes.  A 
32f0: 0a 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d  .prepared statem
3300: 65 6e 74 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ent is compiled 
3310: 61 67 61 69 6e 73 74 20 61 20 73 70 65 63 69 66  against a specif
3320: 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ic version of th
3330: 65 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e.database schem
3340: 61 2e 20 20 5e 57 68 65 6e 65 76 65 72 20 74 68  a.  ^Whenever th
3350: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
3360: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 20 73  a changes, the s
3370: 74 61 74 65 6d 65 6e 74 0a 6d 75 73 74 20 62 65  tatement.must be
3380: 20 72 65 70 72 65 70 61 72 65 64 2e 20 20 5e 57   reprepared.  ^W
3390: 68 65 6e 65 76 65 72 20 61 20 70 72 65 70 61 72  henever a prepar
33a0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  ed statement run
33b0: 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65 63  s, it first chec
33c0: 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks.the schema co
33d0: 6f 6b 69 65 20 74 6f 20 6d 61 6b 65 20 73 75 72  okie to make sur
33e0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  e the value is t
33f0: 68 65 20 73 61 6d 65 20 61 73 20 77 68 65 6e 20  he same as when 
3400: 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 77 61  the statement.wa
3410: 73 20 70 72 65 70 61 72 65 64 20 61 6e 64 20 69  s prepared and i
3420: 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  f the schema coo
3430: 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 2c  kie has changed,
3440: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61   the statement a
3450: 62 6f 72 74 73 0a 69 6e 20 6f 72 64 65 72 20 74  borts.in order t
3460: 6f 20 66 6f 72 63 65 20 74 68 65 20 73 74 61 74  o force the stat
3470: 65 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 70 72  ement to be repr
3480: 65 70 61 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  epared.</p>..<tc
3490: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 73  l>hd_fragment {s
34a0: 63 68 65 6d 61 66 6f 72 6d 61 74 7d 20 7b 73 63  chemaformat} {sc
34b0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62  hema format numb
34c0: 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e  er}</tcl>.<h4>1.
34d0: 32 2e 31 30 20 53 63 68 65 6d 61 20 66 6f 72 6d  2.10 Schema form
34e0: 61 74 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a  at number</h4>..
34f0: 3c 70 3e 54 68 65 20 73 63 68 65 6d 61 20 66 6f  <p>The schema fo
3500: 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73 20 61  rmat number is a
3510: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
3520: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
3530: 66 73 65 74 20 34 34 2e 0a 54 68 65 20 73 63 68  fset 44..The sch
3540: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
3550: 72 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  r is similar to 
3560: 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  the file format 
3570: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 0a 76  read and write.v
3580: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61  ersion numbers a
3590: 74 20 6f 66 66 73 65 74 73 20 31 38 20 61 6e 64  t offsets 18 and
35a0: 20 31 39 20 65 78 63 65 70 74 20 74 68 61 74 20   19 except that 
35b0: 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  the schema forma
35c0: 74 20 6e 75 6d 62 65 72 0a 72 65 66 65 72 73 20  t number.refers 
35d0: 74 6f 20 74 68 65 20 68 69 67 68 2d 6c 65 76 65  to the high-leve
35e0: 6c 20 53 51 4c 20 66 6f 72 6d 61 74 74 69 6e 67  l SQL formatting
35f0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
3600: 20 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65   low-level b-tre
3610: 65 0a 66 6f 72 6d 61 74 74 69 6e 67 2e 20 20 46  e.formatting.  F
3620: 6f 75 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  our schema forma
3630: 74 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 75  t numbers are cu
3640: 72 72 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 3a  rrently defined:
3650: 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76  </p>..<ol>.<li v
3660: 61 6c 75 65 3d 31 3e 46 6f 72 6d 61 74 20 31 20  alue=1>Format 1 
3670: 69 73 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79  is understood by
3680: 20 61 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66   all versions of
3690: 20 53 51 4c 69 74 65 20 62 61 63 6b 20 74 6f 0a   SQLite back to.
36a0: 76 65 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f  version 3.0.0.</
36b0: 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 32 3e  li>.<li value=2>
36c0: 46 6f 72 6d 61 74 20 32 20 61 64 64 73 20 74 68  Format 2 adds th
36d0: 65 20 61 62 69 6c 69 74 79 20 6f 66 20 72 6f 77  e ability of row
36e0: 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
36f0: 65 20 74 61 62 6c 65 0a 74 6f 20 68 61 76 65 20  e table.to have 
3700: 61 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  a varying number
3710: 20 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20   of columns, in 
3720: 6f 72 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74  order to support
3730: 20 74 68 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c   the.[ALTER TABL
3740: 45 20 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20  E | ALTER TABLE 
3750: 2e 2e 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20  ... ADD COLUMN] 
3760: 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20  functionality.  
3770: 53 75 70 70 6f 72 74 20 66 6f 72 0a 72 65 61 64  Support for.read
3780: 69 6e 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20  ing and writing 
3790: 66 6f 72 6d 61 74 20 32 20 77 61 73 20 61 64 64  format 2 was add
37a0: 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ed in SQLite ver
37b0: 73 69 6f 6e 20 33 2e 31 2e 33 20 0a 6f 6e 20 32  sion 3.1.3 .on 2
37c0: 30 30 35 2d 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a  005-02-19.</li>.
37d0: 3c 6c 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d  <li value=3>Form
37e0: 61 74 20 33 20 61 64 64 73 20 74 68 65 20 61 62  at 3 adds the ab
37f0: 69 6c 69 74 79 20 6f 66 20 65 78 74 72 61 20 63  ility of extra c
3800: 6f 6c 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a  olumns added by.
3810: 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41  [ALTER TABLE | A
3820: 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41  LTER TABLE ... A
3830: 44 44 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61  DD COLUMN] to ha
3840: 76 65 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61  ve non-NULL defa
3850: 75 6c 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69  ult.values.  Thi
3860: 73 20 63 61 70 61 62 69 6c 69 74 79 20 77 61 73  s capability was
3870: 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65   added in SQLite
3880: 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 34 20 0a   version 3.1.4 .
3890: 6f 6e 20 32 30 30 35 2d 30 33 2d 31 31 2e 3c 2f  on 2005-03-11.</
38a0: 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e  li>.<li value=4>
38b0: 5e 46 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73  ^Format 4 causes
38c0: 20 53 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65   SQLite to respe
38d0: 63 74 20 74 68 65 0a 5b 64 65 73 63 65 6e 64 69  ct the.[descendi
38e0: 6e 67 20 69 6e 64 69 63 65 73 20 7c 20 44 45 53  ng indices | DES
38f0: 43 20 6b 65 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e  C keyword] on.in
3900: 64 65 78 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  dex declarations
3910: 2e 20 20 28 5e 54 68 65 20 44 45 53 43 20 6b 65  .  (^The DESC ke
3920: 79 77 6f 72 64 20 69 73 20 69 67 6e 6f 72 65 64  yword is ignored
3930: 20 69 6e 20 69 6e 64 69 63 65 73 20 66 6f 72 20   in indices for 
3940: 0a 66 6f 72 6d 61 74 73 20 31 2c 20 32 2c 20 61  .formats 1, 2, a
3950: 6e 64 20 33 2e 29 0a 5e 46 6f 72 6d 61 74 20 34  nd 3.).^Format 4
3960: 20 61 6c 73 6f 20 61 64 64 73 20 74 77 6f 20 6e   also adds two n
3970: 65 77 20 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72  ew boolean recor
3980: 64 20 74 79 70 65 20 76 61 6c 75 65 73 20 28 5b  d type values ([
3990: 73 65 72 69 61 6c 20 74 79 70 65 73 5d 0a 38 20  serial types].8 
39a0: 61 6e 64 20 39 2e 29 20 20 53 75 70 70 6f 72 74  and 9.)  Support
39b0: 20 66 6f 72 20 66 6f 72 6d 61 74 20 34 20 77 61   for format 4 wa
39c0: 73 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74  s added in SQLit
39d0: 65 20 33 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d  e 3.3.0 on.2006-
39e0: 30 31 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c  01-10.</li>.</ol
39f0: 3e 0a 0a 3c 70 3e 5e 4e 65 77 20 64 61 74 61 62  >..<p>^New datab
3a00: 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65  ase files create
3a10: 64 20 62 79 20 53 51 4c 69 74 65 20 75 73 65 20  d by SQLite use 
3a20: 66 6f 72 6d 61 74 20 34 20 62 79 20 64 65 66 61  format 4 by defa
3a30: 75 6c 74 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63  ult..^The [legac
3a40: 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72  y_file_format pr
3a50: 61 67 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65  agma] can be use
3a60: 64 20 74 6f 20 63 61 75 73 65 20 53 51 4c 69 74  d to cause SQLit
3a70: 65 0a 74 6f 20 63 72 65 61 74 65 20 6e 65 77 20  e.to create new 
3a80: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 75  database files u
3a90: 73 69 6e 67 20 66 6f 72 6d 61 74 20 31 2e 0a 54  sing format 1..T
3aa0: 68 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  he format versio
3ab0: 6e 20 6e 75 6d 62 65 72 20 63 61 6e 20 62 65 20  n number can be 
3ac0: 6d 61 64 65 20 74 6f 20 64 65 66 61 75 6c 74 20  made to default 
3ad0: 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20  to 1 instead of 
3ae0: 34 20 62 79 0a 73 65 74 74 69 6e 67 20 5b 53 51  4 by.setting [SQ
3af0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
3b00: 45 5f 46 4f 52 4d 41 54 5d 3d 31 20 61 74 20 63  E_FORMAT]=1 at c
3b10: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70  ompile-time..</p
3b20: 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 31 20 53 75  >..<h4>1.2.11 Su
3b30: 67 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69  ggested cache si
3b40: 7a 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  ze</h4>..<p>The 
3b50: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3b60: 6e 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  n signed integer
3b70: 20 61 74 20 6f 66 66 73 65 74 20 34 38 20 69 73   at offset 48 is
3b80: 20 74 68 65 20 73 75 67 67 65 73 74 65 64 0a 63   the suggested.c
3b90: 61 63 68 65 20 73 69 7a 65 20 69 6e 20 70 61 67  ache size in pag
3ba0: 65 73 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  es for the datab
3bb0: 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 76  ase file.  The v
3bc0: 61 6c 75 65 20 69 73 20 61 20 73 75 67 67 65 73  alue is a sugges
3bd0: 74 69 6f 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53 51  tion.only and SQ
3be0: 4c 69 74 65 20 69 73 20 75 6e 64 65 72 20 6e 6f  Lite is under no
3bf0: 20 6f 62 6c 69 67 61 74 69 6f 6e 20 74 6f 20 68   obligation to h
3c00: 6f 6e 6f 72 20 69 74 2e 20 20 54 68 65 20 61 62  onor it.  The ab
3c10: 73 6f 6c 75 74 65 20 76 61 6c 75 65 0a 6f 66 20  solute value.of 
3c20: 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 75  the integer is u
3c30: 73 65 64 20 61 73 20 74 68 65 20 73 75 67 67 65  sed as the sugge
3c40: 73 74 65 64 20 73 69 7a 65 2e 20 20 54 68 65 20  sted size.  The 
3c50: 73 75 67 67 65 73 74 65 64 20 63 61 63 68 65 20  suggested cache 
3c60: 73 69 7a 65 0a 63 61 6e 20 62 65 20 73 65 74 20  size.can be set 
3c70: 75 73 69 6e 67 20 74 68 65 20 5b 64 65 66 61 75  using the [defau
3c80: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 70 72  lt_cache_size pr
3c90: 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  agma].</p>..<h4>
3ca0: 31 2e 32 2e 31 32 20 49 6e 63 72 65 6d 65 6e 74  1.2.12 Increment
3cb0: 61 6c 20 76 61 63 75 75 6d 20 73 65 74 74 69 6e  al vacuum settin
3cc0: 67 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  gs</h4>..<p>The 
3cd0: 74 77 6f 20 34 2d 62 79 74 65 20 62 69 67 2d 65  two 4-byte big-e
3ce0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 20 61  ndian integers a
3cf0: 74 20 6f 66 66 73 65 74 73 20 35 32 20 61 6e 64  t offsets 52 and
3d00: 20 36 34 20 61 72 65 20 75 73 65 64 0a 74 6f 20   64 are used.to 
3d10: 6d 61 6e 61 67 65 20 74 68 65 20 5b 61 75 74 6f  manage the [auto
3d20: 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e  _vacuum] and [in
3d30: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
3d40: 5d 20 6d 6f 64 65 73 2e 20 20 5e 49 66 0a 74 68  ] modes.  ^If.th
3d50: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
3d60: 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f 20 74  set 52 is zero t
3d70: 68 65 6e 20 70 6f 69 6e 74 65 72 2d 6d 61 70 20  hen pointer-map 
3d80: 28 70 74 72 6d 61 70 29 20 70 61 67 65 73 20 61  (ptrmap) pages a
3d90: 72 65 0a 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re.omitted from 
3da0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3db0: 65 20 61 6e 64 20 6e 65 69 74 68 65 72 20 61 75  e and neither au
3dc0: 74 6f 5f 76 61 63 75 75 6d 20 6e 6f 72 0a 69 6e  to_vacuum nor.in
3dd0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
3de0: 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 2e 20   are supported. 
3df0: 20 5e 49 66 20 74 68 65 20 69 6e 74 65 67 65 72   ^If the integer
3e00: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 73   at offset 52 is
3e10: 0a 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 69  .non-zero then i
3e20: 74 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75  t is the page nu
3e30: 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72 67  mber of the larg
3e40: 65 73 74 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  est root page in
3e50: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66 69   the.database fi
3e60: 6c 65 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  le, the database
3e70: 20 66 69 6c 65 20 77 69 6c 6c 20 63 6f 6e 74 61   file will conta
3e80: 69 6e 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  in ptrmap pages,
3e90: 20 61 6e 64 20 74 68 65 0a 6d 6f 64 65 20 6d 75   and the.mode mu
3ea0: 73 74 20 62 65 20 65 69 74 68 65 72 20 61 75 74  st be either aut
3eb0: 6f 5f 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72  o_vacuum or incr
3ec0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 2e 20  emental_vacuum. 
3ed0: 20 5e 49 6e 20 74 68 69 73 20 6c 61 74 74 65 72   ^In this latter
3ee0: 0a 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67  .case, the integ
3ef0: 65 72 20 61 74 20 6f 66 66 73 65 74 20 36 34 20  er at offset 64 
3f00: 69 73 20 74 72 75 65 20 66 6f 72 20 69 6e 63 72  is true for incr
3f10: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61  emental_vacuum a
3f20: 6e 64 0a 66 61 6c 73 65 20 66 6f 72 20 61 75 74  nd.false for aut
3f30: 6f 5f 76 61 63 75 75 6d 2e 20 20 5e 49 66 20 74  o_vacuum.  ^If t
3f40: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
3f50: 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f 20  fset 52 is zero 
3f60: 74 68 65 6e 0a 74 68 65 20 69 6e 74 65 67 65 72  then.the integer
3f70: 20 61 74 20 6f 66 66 73 65 74 20 36 34 20 6d 75   at offset 64 mu
3f80: 73 74 20 61 6c 73 6f 20 62 65 20 7a 65 72 6f 2e  st also be zero.
3f90: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 33  </p>..<h4>1.2.13
3fa0: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 3c 2f   Text encoding</
3fb0: 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62  h4>..<p>^The 4-b
3fc0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3fd0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3fe0: 20 35 36 20 64 65 74 65 72 6d 69 6e 65 73 20 74   56 determines t
3ff0: 68 65 20 65 6e 63 6f 64 69 6e 67 0a 75 73 65 64  he encoding.used
4000: 20 66 6f 72 20 61 6c 6c 20 74 65 78 74 20 73 74   for all text st
4010: 72 69 6e 67 73 20 73 74 6f 72 65 64 20 69 6e 20  rings stored in 
4020: 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 5e  the database.  ^
4030: 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d 65 61  A value of 1 mea
4040: 6e 73 0a 55 54 46 2d 38 2e 20 20 5e 41 20 76 61  ns.UTF-8.  ^A va
4050: 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e 73 20 55  lue of 2 means U
4060: 54 46 2d 31 36 6c 65 2e 20 20 5e 41 20 76 61 6c  TF-16le.  ^A val
4070: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
4080: 46 2d 31 36 62 65 2e 0a 4e 6f 20 6f 74 68 65 72  F-16be..No other
4090: 20 76 61 6c 75 65 73 20 61 72 65 20 61 6c 6c 6f   values are allo
40a0: 77 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  wed.</p>..<h4>1.
40b0: 32 2e 31 34 20 55 73 65 72 20 76 65 72 73 69 6f  2.14 User versio
40c0: 6e 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c  n number</h4>..<
40d0: 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69  p>^The 4-byte bi
40e0: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
40f0: 20 61 74 20 6f 66 66 73 65 74 20 36 30 20 69 73   at offset 60 is
4100: 20 74 68 65 20 75 73 65 72 20 76 65 72 73 69 6f   the user versio
4110: 6e 20 77 68 69 63 68 0a 69 73 20 73 65 74 20 61  n which.is set a
4120: 6e 64 20 71 75 65 72 69 65 64 20 62 79 20 74 68  nd queried by th
4130: 65 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  e [user_version 
4140: 70 72 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73  pragma].  The us
4150: 65 72 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f  er version is.no
4160: 74 20 75 73 65 64 20 62 79 20 53 51 4c 69 74 65  t used by SQLite
4170: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
4180: 72 61 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41  ragment appid {A
4190: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f  pplication ID}</
41a0: 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20  tcl>.<h4>1.2.15 
41b0: 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f  Application ID</
41c0: 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62  h4>..<p>^The 4-b
41d0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
41e0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
41f0: 20 36 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69   68 is an "Appli
4200: 63 61 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a  cation ID" that.
4210: 63 61 6e 20 62 65 20 73 65 74 20 62 79 20 74 68  can be set by th
4220: 65 20 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63  e [PRAGMA applic
4230: 61 74 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e  ation_id] comman
4240: 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64  d in order to id
4250: 65 6e 74 69 66 79 20 74 68 65 0a 64 61 74 61 62  entify the.datab
4260: 61 73 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67  ase as belonging
4270: 20 74 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65   to or associate
4280: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
4290: 6c 61 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e  lar application.
42a0: 0a 54 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e  .The application
42b0: 20 49 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20   ID is intended 
42c0: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
42d0: 65 73 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61  es used as an.[a
42e0: 70 70 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d  pplication file-
42f0: 66 6f 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70  format].  The ap
4300: 70 6c 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e  plication ID can
4310: 20 62 65 20 75 73 65 64 20 62 79 20 75 74 69 6c   be used by util
4320: 69 74 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b  ities .such as [
4330: 68 74 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69  http://www.darwi
4340: 6e 73 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c  nsys.com/file/ |
4350: 20 66 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74   file(1)] to det
4360: 65 72 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69  ermine the speci
4370: 66 69 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61  fic.file type ra
4380: 74 68 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72  ther than just r
4390: 65 70 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65  eporting "SQLite
43a0: 33 20 44 61 74 61 62 61 73 65 22 2e 20 20 41 20  3 Database".  A 
43b0: 6c 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64  list of.assigned
43c0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73   application IDs
43d0: 20 63 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20   can be seen by 
43e0: 63 6f 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b  consulting the.[
43f0: 68 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74  http://www.sqlit
4400: 65 2e 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61  e.org/src/artifa
4410: 63 74 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65  ct?ci=trunk&file
4420: 6e 61 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d  name=magic.txt|m
4430: 61 67 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69  agic.txt].file i
4440: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75  n the SQLite sou
4450: 72 63 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c  rce repository.<
4460: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4470: 67 6d 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b  gment validfor {
4480: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
4490: 72 20 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a  r number}</tcl>.
44a0: 3c 68 34 3e 31 2e 32 2e 31 36 20 57 72 69 74 65  <h4>1.2.16 Write
44b0: 20 6c 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e   library version
44c0: 20 6e 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73   number and vers
44d0: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
44e0: 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  mber</h4>..<p>^T
44f0: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
4500: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
4510: 6f 66 66 73 65 74 20 39 36 20 73 74 6f 72 65 73  offset 96 stores
4520: 20 74 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45   the .[SQLITE_VE
4530: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61  RSION_NUMBER] va
4540: 6c 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  lue for the SQLi
4550: 74 65 20 6c 69 62 72 61 72 79 20 74 68 61 74 20  te library that 
4560: 6d 6f 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f  most.recently mo
4570: 64 69 66 69 65 64 20 74 68 65 20 64 61 74 61 62  dified the datab
4580: 61 73 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20  ase file.  ^The 
4590: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
45a0: 6e 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66  n integer at.off
45b0: 73 65 74 20 39 32 20 69 73 20 74 68 65 20 76 61  set 92 is the va
45c0: 6c 75 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e  lue of the [chan
45d0: 67 65 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e  ge counter] when
45e0: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d   the version num
45f0: 62 65 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20  ber.was stored. 
4600: 20 54 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   The integer at 
4610: 6f 66 66 73 65 74 20 39 32 20 69 6e 64 69 63 61  offset 92 indica
4620: 74 65 73 20 77 68 69 63 68 20 74 72 61 6e 73 61  tes which transa
4630: 63 74 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f  ction.the versio
4640: 6e 20 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69  n number is vali
4650: 64 20 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d  d for and is som
4660: 65 74 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68  etimes called th
4670: 65 0a 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  e."version-valid
4680: 2d 66 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c  -for number"...<
4690: 68 34 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72  h4>1.2.16 Header
46a0: 20 73 70 61 63 65 20 72 65 73 65 72 76 65 64 20   space reserved 
46b0: 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68  for expansion</h
46c0: 34 3e 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72  4>..<p>All other
46d0: 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 64 61   bytes of the da
46e0: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
46f0: 65 72 20 61 72 65 20 72 65 73 65 72 76 65 64 20  er are reserved 
4700: 66 6f 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e  for.future expan
4710: 73 69 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65  sion and must be
4720: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70   set to zero.</p
4730: 3e 0a 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c  >..<h3>1.3 The L
4740: 6f 63 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68  ock-Byte Page</h
4750: 33 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d  3>..<p>The lock-
4760: 62 79 74 65 20 70 61 67 65 20 69 73 20 74 68 65  byte page is the
4770: 20 73 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20   single page of 
4780: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
4790: 65 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e.that contains 
47a0: 74 68 65 20 62 79 74 65 73 20 61 74 20 6f 66 66  the bytes at off
47b0: 73 65 74 73 20 62 65 74 77 65 65 6e 20 31 30 37  sets between 107
47c0: 33 37 34 31 38 32 34 20 61 6e 64 20 31 30 37 33  3741824 and 1073
47d0: 37 34 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76  742335,.inclusiv
47e0: 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20 66  e.  A database f
47f0: 69 6c 65 20 74 68 61 74 20 69 73 20 6c 65 73 73  ile that is less
4800: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
4810: 6f 20 31 30 37 33 37 34 31 38 32 34 20 62 79 74  o 1073741824 byt
4820: 65 73 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74  es .in size cont
4830: 61 69 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74  ains no lock-byt
4840: 65 20 70 61 67 65 2e 20 20 41 20 64 61 74 61 62  e page.  A datab
4850: 61 73 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20  ase file larger 
4860: 74 68 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20  than.1073741824 
4870: 63 6f 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79  contains exactly
4880: 20 6f 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70   one lock-byte p
4890: 61 67 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  age..</p>..<p>Th
48a0: 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65  e lock-byte page
48b0: 20 69 73 20 73 65 74 20 61 73 69 64 65 20 66 6f   is set aside fo
48c0: 72 20 75 73 65 20 62 79 20 74 68 65 20 6f 70 65  r use by the ope
48d0: 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70  rating-system sp
48e0: 65 63 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70  ecific.[VFS] imp
48f0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69  lementation in i
4900: 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20  mplementing the 
4910: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f  database file lo
4920: 63 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  cking primitives
4930: 2e 0a 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  ..^SQLite does n
4940: 6f 74 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d  ot use the lock-
4950: 62 79 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65  byte page.  ^The
4960: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69   SQLite core .wi
4970: 6c 6c 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72  ll never read or
4980: 20 77 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d   write the lock-
4990: 62 79 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67  byte page,.thoug
49a0: 68 20 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74  h operating-syst
49b0: 65 6d 20 73 70 65 63 69 66 69 63 20 5b 56 46 53  em specific [VFS
49c0: 5d 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ] .implementatio
49d0: 6e 73 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f  ns may choose to
49e0: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 62   read or write b
49f0: 79 74 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b  ytes on the lock
4a00: 2d 62 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f  -byte .page acco
4a10: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65  rding to the .ne
4a20: 65 64 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69  eds and proclivi
4a30: 74 69 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65  ties of the unde
4a40: 72 6c 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20  rlying system.  
4a50: 54 68 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e  The unix and win
4a60: 33 32 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65  32.[VFS] impleme
4a70: 6e 74 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f  ntations that co
4a80: 6d 65 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51  me built into SQ
4a90: 4c 69 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74  Lite do not writ
4aa0: 65 20 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79  e to the.lock-by
4ab0: 74 65 20 70 61 67 65 2c 20 62 75 74 20 74 68 69  te page, but thi
4ac0: 72 64 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70  rd-party VFS imp
4ad0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72  lementations for
4ae0: 0a 6f 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67  .other operating
4af0: 20 73 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c   systems might.<
4b00: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4b10: 67 6d 65 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d  gment {freelist}
4b20: 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65   {freelist} {fre
4b30: 65 2d 70 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63  e-page list}</tc
4b40: 6c 3e 0a 3c 68 33 3e 31 2e 34 20 54 68 65 20 46  l>.<h3>1.4 The F
4b50: 72 65 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70  reelist</h3>..<p
4b60: 3e 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  >A database file
4b70: 20 6d 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f   might contain o
4b80: 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73  ne or more pages
4b90: 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e   that are not in
4ba0: 0a 61 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e  .active use.  Un
4bb0: 75 73 65 64 20 70 61 67 65 73 20 63 61 6e 20 63  used pages can c
4bc0: 6f 6d 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65  ome about, for e
4bd0: 78 61 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66  xample, when inf
4be0: 6f 72 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65  ormation.is dele
4bf0: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
4c00: 61 62 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70  abase.  Unused p
4c10: 61 67 65 73 20 61 72 65 20 73 74 6f 72 65 64 20  ages are stored 
4c20: 6f 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a  on the freelist.
4c30: 61 6e 64 20 61 72 65 20 72 65 75 73 65 64 20 77  and are reused w
4c40: 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  hen additional p
4c50: 61 67 65 73 20 61 72 65 20 72 65 71 75 69 72 65  ages are require
4c60: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66  d.</p>..<p>The f
4c70: 72 65 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e  reelist is organ
4c80: 69 7a 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64  ized as a linked
4c90: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73   list of freelis
4ca0: 74 20 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69  t trunk pages.wi
4cb0: 74 68 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61  th each trunk pa
4cc0: 67 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70  ges containing p
4cd0: 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20  age numbers for 
4ce0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65  zero or more fre
4cf0: 65 6c 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73  elist.leaf pages
4d00: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65  .</p>..<p>A free
4d10: 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20  list trunk page 
4d20: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
4d30: 72 72 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62  rray of 4-byte b
4d40: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
4d50: 72 73 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20  rs..The size of 
4d60: 74 68 65 20 61 72 72 61 79 20 69 73 20 61 73 20  the array is as 
4d70: 6d 61 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73  many integers as
4d80: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65   will fit in the
4d90: 20 75 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66   usable space.of
4da0: 20 61 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69   a page.  The mi
4db0: 6e 69 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61  nimum usable spa
4dc0: 63 65 20 69 73 20 34 38 30 20 62 79 74 65 73 20  ce is 480 bytes 
4dd0: 73 6f 20 74 68 65 20 61 72 72 61 79 20 77 69 6c  so the array wil
4de0: 6c 20 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c  l always.be at l
4df0: 65 61 73 74 20 31 32 30 20 65 6e 74 72 69 65 73  east 120 entries
4e00: 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68   in length.  ^Th
4e10: 65 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20  e first integer 
4e20: 69 6e 20 74 68 65 20 61 72 72 61 79 20 0a 69 73  in the array .is
4e30: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
4e40: 20 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72 65   of the next fre
4e50: 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65  elist trunk page
4e60: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 72 20   in the list or 
4e70: 7a 65 72 6f 20 0a 69 66 20 74 68 69 73 20 69 73  zero .if this is
4e80: 20 74 68 65 20 6c 61 73 74 20 66 72 65 65 6c 69   the last freeli
4e90: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 2e 20 20  st trunk page.  
4ea0: 5e 54 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65  ^The second inte
4eb0: 67 65 72 20 69 6e 20 74 68 65 20 61 72 72 61 79  ger in the array
4ec0: 0a 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .is the number o
4ed0: 66 20 6c 65 61 66 20 70 61 67 65 20 70 6f 69 6e  f leaf page poin
4ee0: 74 65 72 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20  ters to follow. 
4ef0: 20 43 61 6c 6c 20 74 68 65 20 73 65 63 6f 6e 64   Call the second
4f00: 20 69 6e 74 65 67 65 72 20 4c 2e 0a 5e 49 66 20   integer L..^If 
4f10: 4c 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  L is greater tha
4f20: 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74 65  n zero then inte
4f30: 67 65 72 73 20 77 69 74 68 20 61 72 72 61 79 20  gers with array 
4f40: 69 6e 64 65 78 65 73 20 62 65 74 77 65 65 6e 20  indexes between 
4f50: 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73  2 and.L+1 inclus
4f60: 69 76 65 20 63 6f 6e 74 61 69 6e 20 70 61 67 65  ive contain page
4f70: 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 66 72 65   numbers for fre
4f80: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
4f90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69  .</p>..<p>Freeli
4fa0: 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 63 6f  st leaf pages co
4fb0: 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61  ntain no informa
4fc0: 74 69 6f 6e 2e 20 20 5e 53 51 4c 69 74 65 20 61  tion.  ^SQLite a
4fd0: 76 6f 69 64 73 20 72 65 61 64 69 6e 67 20 6f 72  voids reading or
4fe0: 0a 77 72 69 74 69 6e 67 20 66 72 65 65 6c 69 73  .writing freelis
4ff0: 74 20 6c 65 61 66 20 70 61 67 65 73 20 69 6e 20  t leaf pages in 
5000: 6f 72 64 65 72 20 74 6f 20 72 65 64 75 63 65 20  order to reduce 
5010: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
5020: 70 3e 41 20 62 75 67 20 69 6e 20 53 51 4c 69 74  p>A bug in SQLit
5030: 65 20 76 65 72 73 69 6f 6e 73 20 70 72 69 6f 72  e versions prior
5040: 20 74 6f 20 33 2e 36 2e 30 20 63 61 75 73 65 64   to 3.6.0 caused
5050: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
5060: 20 62 65 0a 72 65 70 6f 72 74 65 64 20 61 73 20   be.reported as 
5070: 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f  corrupt if any o
5080: 66 20 74 68 65 20 6c 61 73 74 20 36 20 65 6e 74  f the last 6 ent
5090: 72 69 65 73 20 69 6e 20 74 68 65 20 66 72 65 65  ries in the free
50a0: 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20  list trunk page 
50b0: 0a 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 65 64  .array contained
50c0: 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65 73   non-zero values
50d0: 2e 20 20 4e 65 77 65 72 20 76 65 72 73 69 6f 6e  .  Newer version
50e0: 73 20 6f 66 20 53 51 4c 69 74 65 20 64 6f 20 6e  s of SQLite do n
50f0: 6f 74 20 68 61 76 65 0a 74 68 69 73 20 70 72 6f  ot have.this pro
5100: 62 6c 65 6d 2e 20 20 5e 48 6f 77 65 76 65 72 2c  blem.  ^However,
5110: 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20   newer versions 
5120: 6f 66 20 53 51 4c 69 74 65 20 73 74 69 6c 6c 20  of SQLite still 
5130: 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68 65 20  avoid using the 
5140: 0a 6c 61 73 74 20 73 69 78 20 65 6e 74 72 69 65  .last six entrie
5150: 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73  s in the freelis
5160: 74 20 74 72 75 6e 6b 20 70 61 67 65 20 61 72 72  t trunk page arr
5170: 61 79 20 69 6e 20 6f 72 64 65 72 20 74 68 61 74  ay in order that
5180: 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 73 20   database.files 
5190: 63 72 65 61 74 65 64 20 62 79 20 6e 65 77 65 72  created by newer
51a0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
51b0: 69 74 65 20 63 61 6e 20 62 65 20 72 65 61 64 20  ite can be read 
51c0: 62 79 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e  by older version
51d0: 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  s.of SQLite.</p>
51e0: 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72  ..<p>^The number
51f0: 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70 61 67   of freelist pag
5200: 65 73 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  es is stored as 
5210: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
5220: 69 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e 20 74  ian integer.in t
5230: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
5240: 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  er at an offset 
5250: 6f 66 20 33 36 20 66 72 6f 6d 20 74 68 65 20 62  of 36 from the b
5260: 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
5270: 66 69 6c 65 2e 0a 5e 54 68 65 20 64 61 74 61 62  file..^The datab
5280: 61 73 65 20 68 65 61 64 65 72 20 61 6c 73 6f 20  ase header also 
5290: 73 74 6f 72 65 73 20 74 68 65 20 70 61 67 65 20  stores the page 
52a0: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 66 69  number of the fi
52b0: 72 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75  rst freelist tru
52c0: 6e 6b 0a 70 61 67 65 20 61 73 20 61 20 34 2d 62  nk.page as a 4-b
52d0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
52e0: 6e 74 65 67 65 72 20 61 74 20 61 6e 20 6f 66 66  nteger at an off
52f0: 73 65 74 20 6f 66 20 33 32 20 66 72 6f 6d 20 74  set of 32 from t
5300: 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20  he beginning.of 
5310: 74 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  the file.</p>..<
5320: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
5330: 62 74 72 65 65 20 7b 42 2a 2d 54 72 65 65 73 7d  btree {B*-Trees}
5340: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 35 20 42  </tcl>.<h3>1.5 B
5350: 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68 33 3e  -tree Pages</h3>
5360: 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65 20  ..<p>The b-tree 
5370: 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76 69 64  algorithm provid
5380: 65 73 20 6b 65 79 2f 64 61 74 61 20 73 74 6f 72  es key/data stor
5390: 61 67 65 20 77 69 74 68 20 75 6e 69 71 75 65 20  age with unique 
53a0: 61 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65 79 73  and.ordered keys
53b0: 20 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e 74 65   on page-oriente
53c0: 64 20 73 74 6f 72 61 67 65 20 64 65 76 69 63 65  d storage device
53d0: 73 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f 75 6e  s..For backgroun
53e0: 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e  d information on
53f0: 20 62 2d 74 72 65 65 73 2c 20 73 65 65 0a 4b 6e   b-trees, see.Kn
5400: 75 74 68 2c 20 3c 75 3e 54 68 65 20 41 72 74 20  uth, <u>The Art 
5410: 4f 66 20 43 6f 6d 70 75 74 65 72 20 50 72 6f 67  Of Computer Prog
5420: 72 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56 6f 6c  ramming</u>, Vol
5430: 75 6d 65 20 33 20 22 53 6f 72 74 69 6e 67 0a 61  ume 3 "Sorting.a
5440: 6e 64 20 53 65 61 72 63 68 69 6e 67 22 2c 20 70  nd Searching", p
5450: 61 67 65 73 20 34 37 31 2d 34 37 39 2e 20 20 54  ages 471-479.  T
5460: 77 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d 74 72  wo kinds of b-tr
5470: 65 65 73 20 61 72 65 20 75 73 65 64 20 62 79 0a  ees are used by.
5480: 53 51 4c 69 74 65 2e 20 20 54 68 65 20 61 6c 67  SQLite.  The alg
5490: 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e 75 74  orithm that Knut
54a0: 68 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72 65 65  h calls "B*-Tree
54b0: 22 20 73 74 6f 72 65 73 20 61 6c 6c 20 64 61 74  " stores all dat
54c0: 61 0a 69 6e 20 74 68 65 20 6c 65 61 76 65 73 20  a.in the leaves 
54d0: 6f 66 20 74 68 65 20 74 72 65 65 2e 20 20 53 51  of the tree.  SQ
54e0: 4c 69 74 65 20 63 61 6c 6c 73 20 74 68 69 73 20  Lite calls this 
54f0: 76 61 72 69 65 74 79 20 6f 66 20 62 2d 74 72 65  variety of b-tre
5500: 65 0a 61 20 22 74 61 62 6c 65 20 62 2d 74 72 65  e.a "table b-tre
5510: 65 22 2e 20 54 68 65 20 61 6c 67 6f 72 69 74 68  e". The algorith
5520: 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61 6c  m that Knuth cal
5530: 6c 73 20 73 69 6d 70 6c 79 20 22 42 2d 54 72 65  ls simply "B-Tre
5540: 65 22 0a 73 74 6f 72 65 73 20 62 6f 74 68 20 74  e".stores both t
5550: 68 65 20 6b 65 79 20 61 6e 64 20 74 68 65 20 64  he key and the d
5560: 61 74 61 20 74 6f 67 65 74 68 65 72 20 69 6e 20  ata together in 
5570: 62 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e 64 20  both leaves.and 
5580: 69 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  in interior page
5590: 73 2e 20 20 49 6e 20 74 68 65 20 53 51 4c 69 74  s.  In the SQLit
55a0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
55b0: 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 42  , the original.B
55c0: 2d 54 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 20  -Tree algorithm 
55d0: 73 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e 6c 79  stores keys only
55e0: 2c 20 6f 6d 69 74 74 69 6e 67 20 74 68 65 20 64  , omitting the d
55f0: 61 74 61 20 65 6e 74 69 72 65 6c 79 2c 20 61 6e  ata entirely, an
5600: 64 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e 20 22  d.is called an "
5610: 69 6e 64 65 78 20 62 2d 74 72 65 65 22 2e 0a 0a  index b-tree"...
5620: 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65  <p>A b-tree page
5630: 20 69 73 20 65 69 74 68 65 72 20 61 6e 20 69 6e   is either an in
5640: 74 65 72 69 6f 72 20 70 61 67 65 20 6f 72 20 61  terior page or a
5650: 20 6c 65 61 66 20 70 61 67 65 2e 0a 41 20 6c 65   leaf page..A le
5660: 61 66 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73  af page contains
5670: 20 6b 65 79 73 20 61 6e 64 20 69 6e 20 74 68 65   keys and in the
5680: 20 63 61 73 65 20 6f 66 20 61 20 74 61 62 6c 65   case of a table
5690: 20 62 2d 74 72 65 65 20 65 61 63 68 0a 6b 65 79   b-tree each.key
56a0: 20 68 61 73 20 61 73 73 6f 63 69 61 74 65 64 20   has associated 
56b0: 64 61 74 61 2e 20 20 41 6e 20 69 6e 74 65 72 69  data.  An interi
56c0: 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73  or page contains
56d0: 0a 4b 20 6b 65 79 73 20 74 6f 67 65 74 68 65 72  .K keys together
56e0: 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e 74 65   with K+1 pointe
56f0: 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d 74 72  rs to child b-tr
5700: 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70 6f 69  ee pages..A "poi
5710: 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e 74 65  nter" in an inte
5720: 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65  rior b-tree page
5730: 20 69 73 20 6a 75 73 74 20 74 68 65 20 33 31 2d   is just the 31-
5740: 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61 67 65  bit integer.page
5750: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 63   number of the c
5760: 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a  hild page.</p>..
5770: 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20 64 65  <p>Define the de
5780: 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20 62 2d  pth.of a leaf b-
5790: 74 72 65 65 20 74 6f 20 62 65 20 31 20 61 6e 64  tree to be 1 and
57a0: 20 74 68 65 20 64 65 70 74 68 20 6f 66 20 61 6e   the depth of an
57b0: 79 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  y interior b-tre
57c0: 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72 65  e to be one.more
57d0: 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75   than the maximu
57e0: 6d 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20 6f  m depth of any o
57f0: 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e 2e 20  f its children. 
5800: 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d   ^In a well-form
5810: 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61 6c 6c  ed.database, all
5820: 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61 6e 20   children of an 
5830: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
5840: 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64 65  have the same de
5850: 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20  pth.</p>..<p>In 
5860: 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  an interior b-tr
5870: 65 65 20 70 61 67 65 2c 20 74 68 65 20 70 6f 69  ee page, the poi
5880: 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73 20 6c  nters and keys l
5890: 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72 6e 61  ogically alterna
58a0: 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69 6e 74  te .with a point
58b0: 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64 73 2e  er on both ends.
58c0: 20 28 54 68 65 20 70 72 65 76 69 6f 75 73 20 73   (The previous s
58d0: 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20 62 65  entence is to be
58e0: 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f 6e 63   understood.conc
58f0: 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65 20 61  eptually - the a
5900: 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66 20  ctual layout of 
5910: 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70 6f 69  the keys and.poi
5920: 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74 68 65  nters within the
5930: 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20 63 6f   page is more co
5940: 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20 77 69  mplicated and wi
5950: 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65 64 20  ll be described 
5960: 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e 29 20  in.the sequel.) 
5970: 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68 69 6e   All keys within
5980: 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20 61   the same page a
5990: 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20 61 72  re unique and ar
59a0: 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72 67 61  e logically.orga
59b0: 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e 64 69  nized in ascendi
59c0: 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65  ng order from le
59d0: 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 28 41  ft to right.  (A
59e0: 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64 65 72  gain, this order
59f0: 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c 2c 20  ing.is logical, 
5a00: 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20 20 54  not physical.  T
5a10: 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61 74 69  he actual locati
5a20: 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69  on of keys withi
5a30: 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20 61 72  n the page.is ar
5a40: 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72 20 61  bitrary.) ^For a
5a50: 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74 65  ny key X, pointe
5a60: 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74 0a 6f  rs to the left.o
5a70: 66 20 61 20 58 20 72 65 66 65 72 20 74 6f 20 62  f a X refer to b
5a80: 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 20 77  -tree pages on w
5a90: 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20 61 72  hich all keys ar
5aa0: 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  e less than or e
5ab0: 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e  qual to X..^Poin
5ac0: 74 65 72 73 20 74 6f 20 74 68 65 20 72 69 67 68  ters to the righ
5ad0: 74 20 6f 66 20 58 20 72 65 66 65 72 20 74 6f 20  t of X refer to 
5ae0: 70 61 67 65 73 20 77 68 65 72 65 20 61 6c 6c 20  pages where all 
5af0: 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61 74 65  keys are .greate
5b00: 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c  r than X.</p>..<
5b10: 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e 74 65  p>Within an inte
5b20: 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65  rior b-tree page
5b30: 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64 20 74  , each key and t
5b40: 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74  he pointer to it
5b50: 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65 66 74  s.immediate left
5b60: 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e   are combined in
5b70: 74 6f 20 61 20 73 74 72 75 63 74 75 72 65 20 63  to a structure c
5b80: 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e 20  alled a "cell". 
5b90: 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74 20   The.right-most 
5ba0: 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c 64 20  pointer is held 
5bb0: 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 20 6c  separately.  A l
5bc0: 65 61 66 20 62 2d 74 72 65 65 20 70 61 67 65 20  eaf b-tree page 
5bd0: 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c  has no.pointers,
5be0: 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20 75 73   but it still us
5bf0: 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74 72 75  es the cell stru
5c00: 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b 65  cture to hold ke
5c10: 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d 74  ys for.index b-t
5c20: 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61 6e 64  rees or keys and
5c30: 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61 62   content for tab
5c40: 6c 65 20 62 2d 74 72 65 65 73 2e 20 20 44 61 74  le b-trees.  Dat
5c50: 61 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74 61 69  a is also.contai
5c60: 6e 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 2e  ned in the cell.
5c70: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72 79 20  .</p>..<p>Every 
5c80: 62 2d 74 72 65 65 20 70 61 67 65 20 68 61 73 20  b-tree page has 
5c90: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61 72 65  at most one pare
5ca0: 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  nt b-tree page..
5cb0: 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 69  A b-tree page wi
5cc0: 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74 20 69  thout a parent i
5cd0: 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f 74 20  s called a root 
5ce0: 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20 62 2d  page.  A root b-
5cf0: 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65 74 68  tree page.togeth
5d00: 65 72 20 77 69 74 68 20 74 68 65 20 63 6c 6f 73  er with the clos
5d10: 75 72 65 20 6f 66 20 69 74 73 20 63 68 69 6c 64  ure of its child
5d20: 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d 70 6c  ren form a compl
5d30: 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74 20 69  ete b-tree..It i
5d40: 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e 64 20  s possible (and 
5d50: 69 6e 20 66 61 63 74 20 72 61 74 68 65 72 20 63  in fact rather c
5d60: 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65 20 61  ommon) to have a
5d70: 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65   complete b-tree
5d80: 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f  .that consists o
5d90: 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20  f a single page 
5da0: 74 68 61 74 20 69 73 20 62 6f 74 68 20 61 20 6c  that is both a l
5db0: 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f 6f 74  eaf and the root
5dc0: 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72 65 20  ..Because there 
5dd0: 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66 72 6f  are pointers fro
5de0: 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63 68 69  m parents to chi
5df0: 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70 61 67  ldren, every pag
5e00: 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74 65 20  e of a.complete 
5e10: 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20 6c 6f  b-tree can be lo
5e20: 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20 74 68  cated if only th
5e30: 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6b  e root page is k
5e40: 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a 62 2d  nown.  Hence,.b-
5e50: 74 72 65 65 73 20 61 72 65 20 69 64 65 6e 74 69  trees are identi
5e60: 66 69 65 64 20 62 79 20 74 68 65 69 72 20 72 6f  fied by their ro
5e70: 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 3c  ot page number.<
5e80: 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65  /p>..<p>A b-tree
5e90: 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72 20   page is either 
5ea0: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70  a table b-tree p
5eb0: 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65 78 20  age or an index 
5ec0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 6c 6c  b-tree page..All
5ed0: 20 70 61 67 65 73 20 77 69 74 68 69 6e 20 65 61   pages within ea
5ee0: 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72  ch complete b-tr
5ef0: 65 65 20 61 72 65 20 6f 66 20 74 68 65 20 73 61  ee are of the sa
5f00: 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65 72 20  me type: either 
5f10: 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78 2e 20  table.or index. 
5f20: 20 54 68 65 72 65 20 69 73 20 61 20 6f 6e 65 20   There is a one 
5f30: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 69 6e  table b-trees in
5f40: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
5f50: 6c 65 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 69  le.for each rowi
5f60: 64 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  d table in the d
5f70: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
5f80: 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d  including system
5f90: 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20   tables.such as 
5fa0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20  sqlite_master.  
5fb0: 54 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 64  There is one ind
5fc0: 65 78 20 62 2d 74 72 65 65 73 0a 69 6e 20 74 68  ex b-trees.in th
5fd0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
5fe0: 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20 69  for each index i
5ff0: 6e 20 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e  n the schema, in
6000: 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20  cluding implied 
6010: 69 6e 64 69 63 65 73 0a 63 72 65 61 74 65 64 20  indices.created 
6020: 62 79 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  by uniqueness co
6030: 6e 73 74 72 61 69 6e 74 73 2e 20 20 54 68 65 72  nstraints.  Ther
6040: 65 20 61 72 65 20 6e 6f 20 62 2d 74 72 65 65 73  e are no b-trees
6050: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
6060: 0a 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  .[virtual tables
6070: 5d 2e 20 20 53 70 65 63 69 66 69 63 20 76 69 72  ].  Specific vir
6080: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
6090: 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74  mentations might
60a0: 20 6d 61 6b 65 20 75 73 65 0a 6f 66 20 5b 73 68   make use.of [sh
60b0: 61 64 6f 77 20 74 61 62 6c 65 73 5d 20 66 6f 72  adow tables] for
60c0: 20 73 74 6f 72 61 67 65 2c 20 62 75 74 20 74 68   storage, but th
60d0: 6f 73 65 20 73 68 61 64 6f 77 20 74 61 62 6c 65  ose shadow table
60e0: 73 20 77 69 6c 6c 20 68 61 76 65 20 73 65 70 61  s will have sepa
60f0: 72 61 74 65 0a 65 6e 74 72 69 65 73 20 69 6e 20  rate.entries in 
6100: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
6110: 65 6d 61 2e 20 20 5b 57 49 54 48 4f 55 54 20 52  ema.  [WITHOUT R
6120: 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 75 73 65  OWID] tables use
6130: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 72   index b-trees.r
6140: 61 74 68 65 72 20 74 68 61 6e 20 61 20 74 61 62  ather than a tab
6150: 6c 65 20 62 2d 74 72 65 65 73 2c 20 73 6f 20 74  le b-trees, so t
6160: 68 65 72 65 20 69 73 20 6f 6e 65 0a 69 6e 64 65  here is one.inde
6170: 78 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20  x b-tree in the 
6180: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f  database file fo
6190: 72 20 65 61 63 68 20 5b 57 49 54 48 4f 55 54 20  r each [WITHOUT 
61a0: 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68  ROWID] table..Th
61b0: 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70  e b-tree corresp
61c0: 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 73 71  onding to the sq
61d0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
61e0: 65 20 69 73 20 61 6c 77 61 79 73 20 61 20 74 61  e is always a ta
61f0: 62 6c 65 0a 62 2d 74 72 65 65 20 61 6e 64 20 61  ble.b-tree and a
6200: 6c 77 61 79 73 20 68 61 73 20 61 20 72 6f 6f 74  lways has a root
6210: 20 70 61 67 65 20 6f 66 20 31 2e 0a 54 68 65 20   page of 1..The 
6220: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
6230: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ble contains the
6240: 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
6250: 72 20 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65  r for every othe
6260: 72 20 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64  r .table and ind
6270: 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ex in the databa
6280: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
6290: 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61  >Each entry in a
62a0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f   table b-tree co
62b0: 6e 73 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62  nsists of a 64-b
62c0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
62d0: 72 20 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20  r key.and up to 
62e0: 32 31 34 37 34 38 33 36 34 37 20 62 79 74 65 73  2147483647 bytes
62f0: 20 6f 66 20 61 72 62 69 74 72 61 72 79 20 64 61   of arbitrary da
6300: 74 61 2e 20 20 28 54 68 65 20 6b 65 79 20 6f 66  ta.  (The key of
6310: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 0a   a table b-tree.
6320: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
6330: 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68  he [rowid] of th
6340: 65 20 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74  e SQL table that
6350: 20 74 68 65 20 62 2d 74 72 65 65 20 69 6d 70 6c   the b-tree impl
6360: 65 6d 65 6e 74 73 2e 29 0a 49 6e 74 65 72 69 6f  ements.).Interio
6370: 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  r table b-trees 
6380: 68 6f 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61  hold only keys a
6390: 6e 64 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63  nd pointers to c
63a0: 68 69 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64 61 74  hildren..All dat
63b0: 61 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69  a is contained i
63c0: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
63d0: 65 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a  ee leaves.</p>..
63e0: 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  <p>Each entry in
63f0: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
6400: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20   consists of an 
6410: 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66  arbitrary key of
6420: 20 75 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34   up.to 214748364
6430: 37 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74  7 bytes in lengt
6440: 68 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f  h and no data.</
6450: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
6460: 6d 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61  ment cell_payloa
6470: 64 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d  d {cell payload}
6480: 3c 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65  </tcl>.<p>Define
6490: 20 74 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f   the "payload" o
64a0: 66 20 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74  f a cell to be t
64b0: 68 65 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e  he arbitrary len
64c0: 67 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74  gth section.of t
64d0: 68 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e  he cell.  For an
64e0: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74   index b-tree, t
64f0: 68 65 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73  he key is always
6500: 20 61 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65   arbitrary in le
6510: 6e 67 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74  ngth.and hence t
6520: 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68  he payload is th
6530: 65 20 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72  e key.  There ar
6540: 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c  e no arbitrary l
6550: 65 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69  ength elements.i
6560: 6e 20 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69  n the cells of i
6570: 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d  nterior table b-
6580: 74 72 65 65 20 70 61 67 65 73 20 61 6e 64 20 73  tree pages and s
6590: 6f 20 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61  o those cells ha
65a0: 76 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20  ve no.payload.  
65b0: 54 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61  Table b-tree lea
65c0: 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20  f pages contain 
65d0: 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68  arbitrary length
65e0: 20 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20   content and.so 
65f0: 66 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f  for cells on tho
6600: 73 65 20 70 61 67 65 73 20 74 68 65 20 70 61 79  se pages the pay
6610: 6c 6f 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74  load is the cont
6620: 65 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65  ent..<p>When the
6630: 20 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64   size of payload
6640: 20 66 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65   for a cell exce
6650: 65 64 73 20 61 20 63 65 72 74 61 69 6e 20 74 68  eds a certain th
6660: 72 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64  reshold (to.be d
6670: 65 66 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68  efined later) th
6680: 65 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73  en only the firs
6690: 74 20 66 65 77 20 62 79 74 65 73 20 6f 66 20 74  t few bytes of t
66a0: 68 65 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73  he payload.are s
66b0: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74  tored on the b-t
66c0: 72 65 65 20 70 61 67 65 20 61 6e 64 20 74 68 65  ree page and the
66d0: 20 62 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72   balance is stor
66e0: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
66f0: 69 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f  ist.of content o
6700: 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f  verflow pages.</
6710: 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20  p>..<p>A b-tree 
6720: 70 61 67 65 20 69 73 20 64 69 76 69 64 65 64 20  page is divided 
6730: 69 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20  into regions in 
6740: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72  the following or
6750: 64 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54  der:..<ol>.<li>T
6760: 68 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61  he 100-byte data
6770: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
6780: 20 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20   (found on page 
6790: 31 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20  1 only).<li>The 
67a0: 38 20 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74  8 or 12 byte b-t
67b0: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 0a  ree page header.
67c0: 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69  <li>The cell poi
67d0: 6e 74 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55  nter array.<li>U
67e0: 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65  nallocated space
67f0: 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f  .<li>The cell co
6800: 6e 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54  ntent area.<li>T
6810: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
6820: 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a  on..</ol>.</p>..
6830: 3c 70 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20  <p>The 100-byte 
6840: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65  database file he
6850: 61 64 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e  ader is found on
6860: 6c 79 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68  ly on page 1, wh
6870: 69 63 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20  ich is.always a 
6880: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67  table b-tree pag
6890: 65 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d  e.  All other b-
68a0: 74 72 65 65 20 70 61 67 65 73 20 69 6e 20 74 68  tree pages in th
68b0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
68c0: 6f 6d 69 74 20 74 68 69 73 20 31 30 30 2d 62 79  omit this 100-by
68d0: 74 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a  te header.</p>..
68e0: 3c 70 3e 54 68 65 20 72 65 73 65 72 76 65 64 20  <p>The reserved 
68f0: 72 65 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65  region is an are
6900: 61 20 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63  a of unused spac
6910: 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  e at the end of 
6920: 65 76 65 72 79 0a 70 61 67 65 20 28 65 78 63 65  every.page (exce
6930: 70 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70  pt the locking p
6940: 61 67 65 29 20 74 68 61 74 20 65 78 74 65 6e 73  age) that extens
6950: 69 6f 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20  ions can use to 
6960: 68 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e  hold per-page.in
6970: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65  formation.  ^The
6980: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73   size of the res
6990: 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20  erved region is 
69a0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
69b0: 65 20 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67  e one-byte.unsig
69c0: 6e 65 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e  ned integer foun
69d0: 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f  d at an offset o
69e0: 66 20 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61  f 20 into the da
69f0: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
6a00: 65 72 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20  er..The size of 
6a10: 74 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67  the reserved reg
6a20: 69 6f 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a  ion is usually z
6a30: 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ero.</p>..<p>The
6a40: 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61   b-tree page hea
6a50: 64 65 72 20 69 73 20 38 20 62 79 74 65 73 20 69  der is 8 bytes i
6a60: 6e 20 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20  n size for leaf 
6a70: 70 61 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74  pages and 12.byt
6a80: 65 73 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20  es for interior 
6a90: 70 61 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74  pages.  All mult
6aa0: 69 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20  ibyte values in 
6ab0: 74 68 65 20 70 61 67 65 20 68 65 61 64 65 72 0a  the page header.
6ac0: 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a  are big-endian..
6ad0: 54 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  The b-tree page 
6ae0: 68 65 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73  header is compos
6af0: 65 64 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ed of the follow
6b00: 69 6e 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a  ing fields:</p>.
6b10: 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74  .<center>.<i>B-t
6b20: 72 65 65 20 50 61 67 65 20 48 65 61 64 65 72 20  ree Page Header 
6b30: 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
6b40: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77  table border=1 w
6b50: 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e  idth="80%">.<tr>
6b60: 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
6b70: 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
6b80: 6e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  n.<tr><td align=
6b90: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6ba0: 70 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>0<td align=cen
6bb0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31  ter valign=top>1
6bc0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
6bd0: 41 20 66 6c 61 67 20 69 6e 64 69 63 61 74 69 6e  A flag indicatin
6be0: 67 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  g the b-tree pag
6bf0: 65 20 74 79 70 65 0a 5e 41 20 76 61 6c 75 65 20  e type.^A value 
6c00: 6f 66 20 32 20 6d 65 61 6e 73 20 74 68 65 20 70  of 2 means the p
6c10: 61 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69  age is an interi
6c20: 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  or index b-tree 
6c30: 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f  page..^A value o
6c40: 66 20 35 20 6d 65 61 6e 73 20 74 68 65 20 70 61  f 5 means the pa
6c50: 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f  ge is an interio
6c60: 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70  r table b-tree p
6c70: 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66  age..^A value of
6c80: 20 31 30 20 6d 65 61 6e 73 20 74 68 65 20 70 61   10 means the pa
6c90: 67 65 20 69 73 20 61 20 6c 65 61 66 20 69 6e 64  ge is a leaf ind
6ca0: 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  ex b-tree page..
6cb0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 33 20 6d  ^A value of 13 m
6cc0: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
6cd0: 20 61 20 6c 65 61 66 20 74 61 62 6c 65 20 62 2d   a leaf table b-
6ce0: 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 6e 79 20  tree page..^Any 
6cf0: 6f 74 68 65 72 20 76 61 6c 75 65 20 66 6f 72 20  other value for 
6d00: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
6d10: 74 79 70 65 20 69 73 20 61 6e 20 65 72 72 6f 72  type is an error
6d20: 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
6d30: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6d40: 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>1<td align=cen
6d50: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32  ter valign=top>2
6d60: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
6d70: 42 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f  Byte offset into
6d80: 20 74 68 65 20 70 61 67 65 20 6f 66 20 74 68 65   the page of the
6d90: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
6da0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
6db0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6dc0: 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >3<td align=cent
6dd0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c  er valign=top>2<
6de0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e  td align=left>.N
6df0: 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f  umber of cells o
6e00: 6e 20 74 68 69 73 20 70 61 67 65 0a 3c 74 72 3e  n this page.<tr>
6e10: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6e20: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64   valign=top>5<td
6e30: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6e40: 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c  lign=top>2<td al
6e50: 69 67 6e 3d 6c 65 66 74 3e 0a 4f 66 66 73 65 74  ign=left>.Offset
6e60: 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
6e70: 74 65 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 63  te of the cell c
6e80: 6f 6e 74 65 6e 74 20 61 72 65 61 2e 20 20 41 20  ontent area.  A 
6e90: 7a 65 72 6f 20 76 61 6c 75 65 20 69 73 20 75 73  zero value is us
6ea0: 65 64 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ed to represent 
6eb0: 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 36 35 35  an offset of 655
6ec0: 33 36 2c 20 77 68 69 63 68 20 6f 63 63 75 72 73  36, which occurs
6ed0: 20 6f 6e 20 61 6e 20 65 6d 70 74 79 20 72 6f 6f   on an empty roo
6ee0: 74 20 70 61 67 65 20 77 68 65 6e 20 75 73 69 6e  t page when usin
6ef0: 67 20 61 20 36 35 35 33 36 2d 62 79 74 65 20 70  g a 65536-byte p
6f00: 61 67 65 20 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74  age size..<tr><t
6f10: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6f20: 61 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61  align=top>7<td a
6f30: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6f40: 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67  gn=top>1<td alig
6f50: 6e 3d 6c 65 66 74 3e 0a 4e 75 6d 62 65 72 20 6f  n=left>.Number o
6f60: 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65  f fragmented fre
6f70: 65 20 62 79 74 65 73 20 77 69 74 68 69 6e 20 74  e bytes within t
6f80: 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20  he cell content 
6f90: 61 72 65 61 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  area.<tr><td ali
6fa0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6fb0: 3d 74 6f 70 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  =top>8<td align=
6fc0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6fd0: 70 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>4<td align=lef
6fe0: 74 3e 0a 54 68 65 20 72 69 67 68 74 2d 6d 6f 73  t>.The right-mos
6ff0: 74 20 70 6f 69 6e 74 65 72 20 28 69 6e 74 65 72  t pointer (inter
7000: 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 73  ior b-tree pages
7010: 20 6f 6e 6c 79 29 0a 3c 2f 74 61 62 6c 65 3e 3c   only).</table><
7020: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f 63 65  /blockquote></ce
7030: 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63  nter>..<p>^The c
7040: 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61  ell pointer arra
7050: 79 20 6f 66 20 61 20 62 2d 74 72 65 65 20 70 61  y of a b-tree pa
7060: 67 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  ge immediately f
7070: 6f 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74 72 65  ollows the b-tre
7080: 65 0a 70 61 67 65 20 68 65 61 64 65 72 2e 20 20  e.page header.  
7090: 4c 65 74 20 4b 20 62 65 20 74 68 65 20 6e 75 6d  Let K be the num
70a0: 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20  ber of cells on 
70b0: 74 68 65 20 62 74 72 65 65 2e 20 20 5e 54 68 65  the btree.  ^The
70c0: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61 72   cell pointer.ar
70d0: 72 61 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ray consists of 
70e0: 4b 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72  K 2-byte integer
70f0: 20 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65 20   offsets to the 
7100: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20 20  cell contents.  
7110: 5e 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74 65  ^The.cell pointe
7120: 72 73 20 61 72 65 20 61 72 72 61 6e 67 65 64 20  rs are arranged 
7130: 69 6e 20 6b 65 79 20 6f 72 64 65 72 20 77 69 74  in key order wit
7140: 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c 6c  h left-most cell
7150: 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20   (the cell with 
7160: 74 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65 79  the.smallest key
7170: 29 20 66 69 72 73 74 20 61 6e 64 20 74 68 65 20  ) first and the 
7180: 72 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c 20  right-most cell 
7190: 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74  (the cell with t
71a0: 68 65 20 6c 61 72 67 65 73 74 0a 6b 65 79 29 20  he largest.key) 
71b0: 6c 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65  last.</p>..<p>Ce
71c0: 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 74  ll content is st
71d0: 6f 72 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c  ored in the cell
71e0: 20 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e 20   content region 
71f0: 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  of the b-tree pa
7200: 67 65 2e 0a 53 51 4c 69 74 65 20 73 74 72 69 76  ge..SQLite striv
7210: 65 73 20 74 6f 20 70 6c 61 63 65 20 63 65 6c 6c  es to place cell
7220: 73 20 61 73 20 66 61 72 20 74 6f 77 61 72 64 20  s as far toward 
7230: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62  the end of the b
7240: 2d 74 72 65 65 20 70 61 67 65 20 61 73 0a 69 74  -tree page as.it
7250: 20 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74   can, in order t
7260: 6f 20 6c 65 61 76 65 20 73 70 61 63 65 20 66 6f  o leave space fo
7270: 72 20 66 75 74 75 72 65 20 67 72 6f 77 74 68 20  r future growth 
7280: 6f 66 20 74 68 65 20 63 65 6c 6c 20 70 6f 69 6e  of the cell poin
7290: 74 65 72 20 61 72 72 61 79 2e 0a 54 68 65 20 61  ter array..The a
72a0: 72 65 61 20 69 6e 20 62 65 74 77 65 65 6e 20 74  rea in between t
72b0: 68 65 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f 69  he last cell poi
72c0: 6e 74 65 72 20 61 72 72 61 79 20 65 6e 74 72 79  nter array entry
72d0: 20 61 6e 64 20 74 68 65 20 62 65 67 69 6e 6e 69   and the beginni
72e0: 6e 67 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20  ng of.the first 
72f0: 63 65 6c 6c 20 69 73 20 74 68 65 20 75 6e 61 6c  cell is the unal
7300: 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 2e 0a  located region..
7310: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 70  </p>..<p>^If a p
7320: 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  age contains no 
7330: 63 65 6c 6c 73 20 28 77 68 69 63 68 20 69 73 20  cells (which is 
7340: 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 66 6f  only possible fo
7350: 72 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 6f 66  r a root page.of
7360: 20 61 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f   a table that co
7370: 6e 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73 29 20  ntains no rows) 
7380: 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20  then the offset 
7390: 74 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  to the cell cont
73a0: 65 6e 74 0a 61 72 65 61 20 77 69 6c 6c 20 65 71  ent.area will eq
73b0: 75 61 6c 20 74 68 65 20 70 61 67 65 20 73 69 7a  ual the page siz
73c0: 65 20 6d 69 6e 75 73 20 74 68 65 20 62 79 74 65  e minus the byte
73d0: 73 20 6f 66 20 72 65 73 65 72 76 65 64 20 73 70  s of reserved sp
73e0: 61 63 65 2e 20 20 5e 28 49 66 0a 74 68 65 20 64  ace.  ^(If.the d
73f0: 61 74 61 62 61 73 65 20 75 73 65 73 20 61 20 36  atabase uses a 6
7400: 35 35 33 36 2d 62 79 74 65 20 70 61 67 65 20 73  5536-byte page s
7410: 69 7a 65 20 61 6e 64 20 74 68 65 20 72 65 73 65  ize and the rese
7420: 72 76 65 64 20 73 70 61 63 65 20 69 73 20 7a 65  rved space is ze
7430: 72 6f 0a 28 74 68 65 20 75 73 75 61 6c 20 76 61  ro.(the usual va
7440: 6c 75 65 20 66 6f 72 20 72 65 73 65 72 76 65 64  lue for reserved
7450: 20 73 70 61 63 65 29 20 74 68 65 6e 20 74 68 65   space) then the
7460: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66   cell content of
7470: 66 73 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79  fset of an.empty
7480: 20 70 61 67 65 20 77 61 6e 74 73 20 74 6f 20 62   page wants to b
7490: 65 20 36 35 35 33 36 2e 20 20 0a 48 6f 77 65 76  e 65536.  .Howev
74a0: 65 72 2c 20 74 68 61 74 20 69 6e 74 65 67 65 72  er, that integer
74b0: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f   is too large to
74c0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a   be stored in a.
74d0: 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  2-byte unsigned 
74e0: 69 6e 74 65 67 65 72 2c 20 73 6f 20 61 20 76 61  integer, so a va
74f0: 6c 75 65 20 6f 66 20 30 20 69 73 20 75 73 65 64  lue of 0 is used
7500: 20 69 6e 20 69 74 73 20 70 6c 61 63 65 2e 29 5e   in its place.)^
7510: 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b  ..<p>A freeblock
7520: 20 69 73 20 61 20 73 74 72 75 63 74 75 72 65 20   is a structure 
7530: 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79  used to identify
7540: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61   unallocated spa
7550: 63 65 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72  ce within.a b-tr
7560: 65 65 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c  ee page.  Freebl
7570: 6f 63 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a  ocks are organiz
7580: 65 64 20 61 73 20 61 20 63 68 61 69 6e 2e 20 20  ed as a chain.  
7590: 5e 54 68 65 20 66 69 72 73 74 20 32 20 62 79 74  ^The first 2 byt
75a0: 65 73 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63  es of.a freebloc
75b0: 6b 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69  k are a big-endi
75c0: 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
75d0: 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 69   is the offset i
75e0: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
75f0: 65 0a 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72  e.of the next fr
7600: 65 65 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63  eeblock in the c
7610: 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66  hain, or zero if
7620: 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69   the freeblock i
7630: 73 20 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68  s the last on.th
7640: 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 74  e chain.  ^The t
7650: 68 69 72 64 20 61 6e 64 20 66 6f 75 72 74 68 20  hird and fourth 
7660: 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 66 72  bytes of each fr
7670: 65 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62  eeblock form.a b
7680: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
7690: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 73  r which is the s
76a0: 69 7a 65 20 6f 66 20 74 68 65 20 66 72 65 65 62  ize of the freeb
76b0: 6c 6f 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69  lock in bytes, i
76c0: 6e 63 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62  ncluding.the 4-b
76d0: 79 74 65 20 68 65 61 64 65 72 2e 20 20 5e 46 72  yte header.  ^Fr
76e0: 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77  eeblocks are alw
76f0: 61 79 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e  ays connected in
7700: 20 6f 72 64 65 72 20 0a 6f 66 20 69 6e 63 72 65   order .of incre
7710: 61 73 69 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e  asing offset.  ^
7720: 54 68 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64  The second field
7730: 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70   of the b-tree p
7740: 61 67 65 20 68 65 61 64 65 72 20 69 73 20 74 68  age header is th
7750: 65 0a 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20  e.offset of the 
7760: 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c  first freeblock,
7770: 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72   or zero if ther
7780: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
7790: 63 6b 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e  cks on the.page.
77a0: 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72    ^In a well-for
77b0: 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c  med b-tree page,
77c0: 20 74 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61   there will alwa
77d0: 79 73 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f  ys be at least o
77e0: 6e 65 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74  ne cell.before t
77f0: 68 65 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f  he first freeblo
7800: 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72  ck.</p>..<p>A fr
7810: 65 65 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73  eeblock requires
7820: 20 61 74 20 6c 65 61 73 74 20 34 20 62 79 74 65   at least 4 byte
7830: 73 20 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20  s of space.  If 
7840: 74 68 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c  there is an isol
7850: 61 74 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c  ated.group of 1,
7860: 20 32 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20   2, or 3 unused 
7870: 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68 65  bytes within the
7880: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72   cell content ar
7890: 65 61 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a  ea, those bytes.
78a0: 63 6f 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d  comprise a fragm
78b0: 65 6e 74 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c  ent.  ^The total
78c0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
78d0: 20 69 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74   in all fragment
78e0: 73 20 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74  s is stored.in t
78f0: 68 65 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f  he fifth field o
7900: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7910: 65 20 68 65 61 64 65 72 2e 20 20 5e 49 6e 20 61  e header.  ^In a
7920: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74   well-formed b-t
7930: 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 74 6f  ree page,.the to
7940: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
7950: 74 65 73 20 69 6e 20 66 72 61 67 6d 65 6e 74 73  tes in fragments
7960: 20 6d 61 79 20 6e 6f 74 20 65 78 63 65 65 64 20   may not exceed 
7970: 36 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  60.</p>..<p>The 
7980: 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  total amount of 
7990: 66 72 65 65 20 73 70 61 63 65 20 6f 6e 20 61 20  free space on a 
79a0: 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e 73  b-tree page cons
79b0: 69 73 74 73 20 6f 66 20 74 68 65 20 73 69 7a 65  ists of the size
79c0: 0a 6f 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61  .of the unalloca
79d0: 74 65 64 20 72 65 67 69 6f 6e 20 70 6c 75 73 20  ted region plus 
79e0: 74 68 65 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f  the total size o
79f0: 66 20 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73  f all freeblocks
7a00: 20 70 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65 72   plus the.number
7a10: 20 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66   of fragmented f
7a20: 72 65 65 20 62 79 74 65 73 2e 20 20 5e 53 51 4c  ree bytes.  ^SQL
7a30: 69 74 65 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d  ite may from tim
7a40: 65 20 74 6f 20 74 69 6d 65 20 72 65 6f 72 67 61  e to time reorga
7a50: 6e 69 7a 65 0a 61 20 62 2d 74 72 65 65 20 70 61  nize.a b-tree pa
7a60: 67 65 20 73 6f 20 74 68 61 74 20 74 68 65 72 65  ge so that there
7a70: 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63   are no freebloc
7a80: 6b 73 20 6f 72 20 66 72 61 67 6d 65 6e 74 20 62  ks or fragment b
7a90: 79 74 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64  ytes, all.unused
7aa0: 20 62 79 74 65 73 20 61 72 65 20 63 6f 6e 74 61   bytes are conta
7ab0: 69 6e 65 64 20 69 6e 20 74 68 65 20 75 6e 61 6c  ined in the unal
7ac0: 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 72 65  located space re
7ad0: 67 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65  gion, and all.ce
7ae0: 6c 6c 73 20 61 72 65 20 70 61 63 6b 65 64 20 74  lls are packed t
7af0: 69 67 68 74 6c 79 20 61 74 20 74 68 65 20 65 6e  ightly at the en
7b00: 64 20 6f 66 20 74 68 65 20 70 61 67 65 2e 20 20  d of the page.  
7b10: 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 0a  This is called .
7b20: 22 64 65 66 72 61 67 6d 65 6e 74 69 6e 67 22 20  "defragmenting" 
7b30: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
7b40: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
7b50: 61 67 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b 76  agment varint {v
7b60: 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
7b70: 6e 74 65 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d  nteger} {varint}
7b80: 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72  </tcl>..<p>A var
7b90: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
7ba0: 65 67 65 72 20 6f 72 20 22 76 61 72 69 6e 74 22  eger or "varint"
7bb0: 20 69 73 20 61 20 73 74 61 74 69 63 20 48 75 66   is a static Huf
7bc0: 66 6d 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66  fman encoding.of
7bd0: 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   64-bit twos-com
7be0: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73  plement integers
7bf0: 20 74 68 61 74 20 75 73 65 73 20 6c 65 73 73 20   that uses less 
7c00: 73 70 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20  space for small 
7c10: 70 6f 73 69 74 69 76 65 20 0a 76 61 6c 75 65 73  positive .values
7c20: 2e 20 0a 41 20 76 61 72 69 6e 74 20 69 73 20 62  . .A varint is b
7c30: 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62  etween 1 and 9 b
7c40: 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20  ytes in length. 
7c50: 20 54 68 65 20 76 61 72 69 6e 74 20 63 6f 6e 73   The varint cons
7c60: 69 73 74 73 20 6f 66 20 65 69 74 68 65 72 0a 7a  ists of either.z
7c70: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65  ero or more byte
7c80: 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20   which have the 
7c90: 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 73  high-order bit s
7ca0: 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  et followed by a
7cb0: 20 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69 74   single byte.wit
7cc0: 68 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  h the high-order
7cd0: 20 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20 6e   bit clear, or n
7ce0: 69 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63 68  ine bytes, which
7cf0: 65 76 65 72 20 69 73 20 73 68 6f 72 74 65 72 2e  ever is shorter.
7d00: 0a 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65 6e  .The lower seven
7d10: 20 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f 66   bits of each of
7d20: 20 74 68 65 20 66 69 72 73 74 20 65 69 67 68 74   the first eight
7d30: 20 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20 38   bytes and all 8
7d40: 20 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69 6e   bits of.the nin
7d50: 74 68 20 62 79 74 65 20 61 72 65 20 75 73 65 64  th byte are used
7d60: 20 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20   to reconstruct 
7d70: 74 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73 2d  the 64-bit twos-
7d80: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
7d90: 65 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65 20  er..Varints are 
7da0: 62 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74 73  big-endian: bits
7db0: 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20   taken from the 
7dc0: 65 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66 20  earlier byte of 
7dd0: 74 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20 74  the varint.are t
7de0: 68 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69 63  he more signific
7df0: 61 6e 74 20 61 6e 64 20 62 69 74 73 20 74 61 6b  ant and bits tak
7e00: 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61 74 65  en from the late
7e10: 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c  r bytes. </p>..<
7e20: 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  p>The format of 
7e30: 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73 20 6f  a cell depends o
7e40: 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f 66 20  n which kind of 
7e50: 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 65 20  b-tree page the 
7e60: 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f 6e 2e  cell.appears on.
7e70: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
7e80: 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20  table shows the 
7e90: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20 63 65  elements of a ce
7ea0: 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f 66 20  ll, in.order of 
7eb0: 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f 72 20  appearance, for 
7ec0: 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d 74 72  the various b-tr
7ed0: 65 65 20 70 61 67 65 20 74 79 70 65 73 2e 3c 2f  ee page types.</
7ee0: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
7ef0: 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c  <dl>.<dt><p>Tabl
7f00: 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65  e B-Tree Leaf Ce
7f10: 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  ll:</p></dt>.<dd
7f20: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76  ><p><ul>.<li>A v
7f30: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
7f40: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
7f50: 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c  of bytes of payl
7f60: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
7f70: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
7f80: 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  A varint which i
7f90: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65  s the integer ke
7fa0: 79 2c 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69  y, a.k.a. "[rowi
7fb0: 64 5d 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74  d]".<li>The init
7fc0: 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74  ial portion of t
7fd0: 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  he payload that 
7fe0: 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74  does not spill t
7ff0: 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73  o overflow.pages
8000: 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62  ..<li>A 4-byte b
8010: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
8020: 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  r page number fo
8030: 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65  r the first page
8040: 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77   of the.overflow
8050: 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69   page list - omi
8060: 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c  tted if all payl
8070: 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20  oad fits on the 
8080: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75  b-tree page..</u
8090: 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  l></p></dd>..<dt
80a0: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
80b0: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c   Interior Cell:<
80c0: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
80d0: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  <ul>.<li>A 4-byt
80e0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67  e big-endian pag
80f0: 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
8100: 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64  s the left child
8110: 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20   pointer..<li>A 
8120: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
8130: 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79 0a  the integer key.
8140: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  </ul></p></dd>..
8150: 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54  <dt><p>Index B-T
8160: 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f  ree Leaf Cell:</
8170: 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c  p></dt>.<dd><p><
8180: 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74  ul>.<li>A varint
8190: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f   which is the to
81a0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
81b0: 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f  tes of key paylo
81c0: 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e  ad, including an
81d0: 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54  y.overflow.<li>T
81e0: 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69  he initial porti
81f0: 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  on of the payloa
8200: 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  d that does not 
8210: 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f  spill to overflo
8220: 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34  w.pages..<li>A 4
8230: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
8240: 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75   integer page nu
8250: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72  mber for the fir
8260: 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  st page of the.o
8270: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73  verflow page lis
8280: 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61  t - omitted if a
8290: 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20  ll payload fits 
82a0: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
82b0: 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64  ge..</ul></p></d
82c0: 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78  d>..<dt><p>Index
82d0: 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72   B-Tree Interior
82e0: 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a   Cell:</p></dt>.
82f0: 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e  <dd><p><ul>.<li>
8300: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
8310: 69 61 6e 70 61 67 65 20 6e 75 6d 62 65 72 20 77  ianpage number w
8320: 68 69 63 68 20 69 73 20 74 68 65 20 6c 65 66 74  hich is the left
8330: 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a   child pointer..
8340: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
8350: 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ch is the total 
8360: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
8370: 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20  of key payload, 
8380: 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76  including any.ov
8390: 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69  erflow.<li>The i
83a0: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
83b0: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
83c0: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
83d0: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
83e0: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
83f0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
8400: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
8410: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
8420: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
8430: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
8440: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
8450: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
8460: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
8470: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c  </ul></p></dd>.<
8480: 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  /dl></blockquote
8490: 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66 6f 72 6d  >..<p>The inform
84a0: 61 74 69 6f 6e 20 61 62 6f 76 65 20 63 61 6e 20  ation above can 
84b0: 62 65 20 72 65 63 61 73 74 20 69 6e 74 6f 20 61  be recast into a
84c0: 20 74 61 62 6c 65 20 66 6f 72 6d 61 74 20 61 73   table format as
84d0: 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
84e0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
84f0: 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63 65 6c 6c  cellformat {cell
8500: 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61 72 79 7d   format summary}
8510: 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65 72 3e 0a  </tcl>.<center>.
8520: 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c 6c 20 46  <i>B-tree Cell F
8530: 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62 6c 65  ormat</i>.<table
8540: 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68 3d   border=1 width=
8550: 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 20 72  "80%">.<tr><th r
8560: 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61 74 79 70  owspan=2>Datatyp
8570: 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c 73 70 61  e.    <th colspa
8580: 6e 3d 34 3e 41 70 70 65 61 72 73 20 69 6e 2e 2e  n=4>Appears in..
8590: 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77 73 70 61  ..    <th rowspa
85a0: 6e 3d 32 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  n=2>Description.
85b0: 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65 20 4c 65  <tr><th>Table Le
85c0: 61 66 0a 20 20 20 20 3c 74 68 3e 54 61 62 6c 65  af.    <th>Table
85d0: 20 49 6e 74 65 72 69 6f 72 0a 20 20 20 20 3c 74   Interior.    <t
85e0: 68 3e 49 6e 64 65 78 20 4c 65 61 66 0a 20 20 20  h>Index Leaf.   
85f0: 20 3c 74 68 3e 49 6e 64 65 78 20 49 6e 74 65 72   <th>Index Inter
8600: 69 6f 72 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ior.<tr><td alig
8610: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8620: 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67  top>4-byte integ
8630: 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  er.    <td align
8640: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8650: 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74  op>&nbsp;.    <t
8660: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8670: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8680: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8690: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
86a0: 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74  op>&nbsp;.    <t
86b0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
86c0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
86d0: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
86e0: 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65  =left>Page numbe
86f0: 72 20 6f 66 20 6c 65 66 74 20 63 68 69 6c 64 0a  r of left child.
8700: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
8710: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8720: 76 61 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61  varint.    <td a
8730: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8740: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8750: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8760: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8770: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
8780: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8790: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
87a0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
87b0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
87c0: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
87d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62   align=left>Numb
87e0: 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70  er of bytes of p
87f0: 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61  ayload.<tr><td a
8800: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8810: 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20  gn=top>varint.  
8820: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8830: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8840: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8850: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8860: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8870: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8880: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8890: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
88a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
88b0: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
88c0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
88d0: 3e 52 6f 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61  >Rowid.<tr><td a
88e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
88f0: 67 6e 3d 74 6f 70 3e 62 79 74 65 20 61 72 72 61  gn=top>byte arra
8900: 79 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  y.    <td align=
8910: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8920: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8930: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8940: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
8950: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8960: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8970: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8980: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8990: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
89a0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
89b0: 6e 3d 6c 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c  n=left>Payload.<
89c0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
89d0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34  ter valign=top>4
89e0: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20  -byte integer.  
89f0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8a00: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8a10: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8a20: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8a30: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
8a40: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8a50: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8a60: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8a70: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8a80: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8a90: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65      <td align=le
8aa0: 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f  ft>Page number o
8ab0: 66 20 66 69 72 73 74 20 6f 76 65 72 66 6c 6f 77  f first overflow
8ac0: 20 70 61 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f   page.</table></
8ad0: 63 65 6e 74 65 72 3e 0a 0a 0a 0a 3c 74 72 3e 3c  center>....<tr><
8ae0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8af0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 0a 0a 3c 70 3e  valign=top>..<p>
8b00: 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61  The amount of pa
8b10: 79 6c 6f 61 64 20 74 68 61 74 20 73 70 69 6c 6c  yload that spill
8b20: 73 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20  s onto overflow 
8b30: 70 61 67 65 73 20 61 6c 73 6f 20 64 65 70 65 6e  pages also depen
8b40: 64 73 20 6f 6e 0a 74 68 65 20 70 61 67 65 20 74  ds on.the page t
8b50: 79 70 65 2e 20 20 46 6f 72 20 74 68 65 20 66 6f  ype.  For the fo
8b60: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 75 74 61 74  llowing computat
8b70: 69 6f 6e 73 2c 20 6c 65 74 20 55 20 62 65 20 74  ions, let U be t
8b80: 68 65 20 75 73 61 62 6c 65 20 73 69 7a 65 0a 6f  he usable size.o
8b90: 66 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  f a database pag
8ba0: 65 2c 20 74 68 65 20 74 6f 74 61 6c 20 70 61 67  e, the total pag
8bb0: 65 20 73 69 7a 65 20 6c 65 73 73 20 74 68 65 20  e size less the 
8bc0: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20 61  reserved space a
8bd0: 74 20 74 68 65 0a 65 6e 64 20 6f 66 20 65 61 63  t the.end of eac
8be0: 68 20 70 61 67 65 2e 20 20 41 6e 64 20 6c 65 74  h page.  And let
8bf0: 20 50 20 62 65 20 74 68 65 20 70 61 79 6c 6f 61   P be the payloa
8c00: 64 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c  d size.</p>..<bl
8c10: 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64  ockquote><dl>.<d
8c20: 74 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c  t>Table B-Tree L
8c30: 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c  eaf Cell:</dt>.<
8c40: 64 64 3e 3c 70 3e 0a 5e 49 66 20 74 68 65 20 70  dd><p>.^If the p
8c50: 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73  ayload size P is
8c60: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
8c70: 75 61 6c 20 74 6f 20 55 2d 33 35 20 74 68 65 6e  ual to U-35 then
8c80: 0a 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c  .the entire payl
8c90: 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  oad is stored on
8ca0: 20 74 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66   the b-tree leaf
8cb0: 20 70 61 67 65 2e 20 20 0a 5e 28 4c 65 74 20 4d   page.  .^(Let M
8cc0: 20 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32   be ((U-12)*32/2
8cd0: 35 35 29 2d 32 33 2e 20 20 49 66 20 50 20 69 73  55)-23.  If P is
8ce0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 55 2d   greater than U-
8cf0: 33 35 0a 74 68 65 6e 20 74 68 65 20 6e 75 6d 62  35.then the numb
8d00: 65 72 20 6f 66 20 62 79 74 65 20 73 74 6f 72 65  er of byte store
8d10: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
8d20: 6c 65 61 66 20 70 61 67 65 20 69 73 20 74 68 65  leaf page is the
8d30: 20 73 6d 61 6c 6c 65 72 20 6f 66 0a 4d 2b 28 28   smaller of.M+((
8d40: 50 2d 4d 29 25 28 55 2d 34 29 29 20 61 6e 64 20  P-M)%(U-4)) and 
8d50: 55 2d 33 35 2e 29 5e 0a 5e 28 4e 6f 74 65 20 74  U-35.)^.^(Note t
8d60: 68 61 74 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  hat number of by
8d70: 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  tes stored on th
8d80: 65 20 6c 65 61 66 20 70 61 67 65 20 69 73 20 6e  e leaf page is n
8d90: 65 76 65 72 20 6c 65 73 73 20 74 68 61 6e 20 4d  ever less than M
8da0: 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  .)^.</p></dd>..<
8db0: 64 74 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20  dt>Table B-Tree 
8dc0: 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f  Interior Cell:</
8dd0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e 74 65  dt>.<dd><p>.Inte
8de0: 72 69 6f 72 20 70 61 67 65 73 20 6f 66 20 74 61  rior pages of ta
8df0: 62 6c 65 20 62 2d 74 72 65 65 73 20 68 61 76 65  ble b-trees have
8e00: 20 6e 6f 20 70 61 79 6c 6f 61 64 20 61 6e 64 20   no payload and 
8e10: 73 6f 20 74 68 65 72 65 20 69 73 20 6e 65 76 65  so there is neve
8e20: 72 0a 61 6e 79 20 70 61 79 6c 6f 61 64 20 74 6f  r.any payload to
8e30: 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64 64   spill..</p></dd
8e40: 3e 0a 0a 3c 64 74 3e 49 6e 64 65 78 20 42 2d 54  >..<dt>Index B-T
8e50: 72 65 65 20 4c 65 61 66 20 4f 72 20 49 6e 74 65  ree Leaf Or Inte
8e60: 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a  rior Cell:</dt>.
8e70: 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58 20  <dd><p>.^(Let X 
8e80: 62 65 20 28 28 55 2d 31 32 29 2a 36 34 2f 32 35  be ((U-12)*64/25
8e90: 35 29 2d 32 33 29 2e 20 20 49 66 20 74 68 65 20  5)-23).  If the 
8ea0: 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20 69  payload size P i
8eb0: 73 20 6c 65 73 73 20 74 68 61 6e 0a 6f 72 20 65  s less than.or e
8ec0: 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e 20 74  qual to X then t
8ed0: 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61  he entire payloa
8ee0: 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  d is stored on t
8ef0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 29  he b-tree page.)
8f00: 5e 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28 28 55  ^.^(Let M be ((U
8f10: 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e  -12)*32/255)-23.
8f20: 20 20 49 66 20 50 20 69 73 20 67 72 65 61 74 65    If P is greate
8f30: 72 20 74 68 61 6e 20 58 20 74 68 65 6e 20 74 68  r than X then th
8f40: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65  e number.of byte
8f50: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
8f60: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 74 68  -tree page is th
8f70: 65 20 73 6d 61 6c 6c 65 72 20 6f 66 0a 4d 2b 28  e smaller of.M+(
8f80: 28 50 2d 4d 29 25 28 55 2d 34 29 29 20 61 6e 64  (P-M)%(U-4)) and
8f90: 20 58 2e 29 5e 0a 5e 28 4e 6f 74 65 20 74 68 61   X.)^.^(Note tha
8fa0: 74 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  t number of byte
8fb0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
8fc0: 69 6e 64 65 78 20 70 61 67 65 20 69 73 20 6e 65  index page is ne
8fd0: 76 65 72 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e  ver less than M.
8fe0: 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64  )^.</p></dd>.</d
8ff0: 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  l></blockquote>.
9000: 0a 3c 70 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77  .<p>The overflow
9010: 20 74 68 72 65 73 68 6f 6c 64 73 20 61 72 65 20   thresholds are 
9020: 64 65 73 69 67 6e 65 64 20 74 6f 20 67 69 76 65  designed to give
9030: 20 61 20 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75   a minimum fanou
9040: 74 20 6f 66 0a 34 20 66 6f 72 20 69 6e 64 65 78  t of.4 for index
9050: 20 62 2d 74 72 65 65 73 20 61 6e 64 20 74 6f 20   b-trees and to 
9060: 6d 61 6b 65 20 73 75 72 65 20 65 6e 6f 75 67 68  make sure enough
9070: 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 0a   of the payload.
9080: 69 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  is on the b-tree
9090: 20 70 61 67 65 20 74 68 61 74 20 74 68 65 20 72   page that the r
90a0: 65 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 6e  ecord header can
90b0: 20 75 73 75 61 6c 6c 79 20 62 65 20 61 63 63 65   usually be acce
90c0: 73 73 65 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e  ssed.without con
90d0: 73 75 6c 74 69 6e 67 20 61 6e 20 6f 76 65 72 66  sulting an overf
90e0: 6c 6f 77 20 70 61 67 65 2e 20 20 49 6e 20 68 69  low page.  In hi
90f0: 6e 64 73 69 67 68 74 2c 20 74 68 65 20 64 65 73  ndsight, the des
9100: 69 67 6e 65 72 73 20 6f 66 0a 74 68 65 20 53 51  igners of.the SQ
9110: 4c 69 74 65 20 62 2d 74 72 65 65 20 6c 6f 67 69  Lite b-tree logi
9120: 63 20 72 65 61 6c 69 7a 65 20 74 68 61 74 20 74  c realize that t
9130: 68 65 73 65 20 74 68 72 65 73 68 6f 6c 64 73 20  hese thresholds 
9140: 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a  could have been.
9150: 6d 61 64 65 20 6d 75 63 68 20 73 69 6d 70 6c 65  made much simple
9160: 72 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65  r.  However, the
9170: 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 63 61   computations ca
9180: 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 0a  nnot be changed.
9190: 77 69 74 68 6f 75 74 20 72 65 73 75 6c 74 69 6e  without resultin
91a0: 67 20 69 6e 20 61 6e 20 69 6e 63 6f 6d 70 61 74  g in an incompat
91b0: 69 62 6c 65 20 66 69 6c 65 20 66 6f 72 6d 61 74  ible file format
91c0: 2e 20 20 41 6e 64 20 74 68 65 20 63 75 72 72 65  .  And the curre
91d0: 6e 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 0a  nt computations.
91e0: 77 6f 72 6b 20 77 65 6c 6c 2c 20 65 76 65 6e 20  work well, even 
91f0: 69 66 20 74 68 65 79 20 61 72 65 20 61 20 6c 69  if they are a li
9200: 74 74 6c 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70  ttle complex.</p
9210: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
9220: 65 6e 74 20 6f 76 66 6c 70 67 73 20 7b 6f 76 65  ent ovflpgs {ove
9230: 72 66 6c 6f 77 20 70 61 67 65 7d 20 7b 6f 76 65  rflow page} {ove
9240: 72 66 6c 6f 77 20 70 61 67 65 73 7d 3c 2f 74 63  rflow pages}</tc
9250: 6c 3e 0a 3c 68 33 3e 31 2e 36 20 43 65 6c 6c 20  l>.<h3>1.6 Cell 
9260: 50 61 79 6c 6f 61 64 20 4f 76 65 72 66 6c 6f 77  Payload Overflow
9270: 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Pages</h3>..<p>
9280: 5e 57 68 65 6e 20 74 68 65 20 70 61 79 6c 6f 61  ^When the payloa
9290: 64 20 6f 66 20 61 20 62 2d 74 72 65 65 20 63 65  d of a b-tree ce
92a0: 6c 6c 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20  ll is too large 
92b0: 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65 20 70  for the b-tree p
92c0: 61 67 65 2c 0a 74 68 65 20 73 75 72 70 6c 75 73  age,.the surplus
92d0: 20 69 73 20 73 70 69 6c 6c 65 64 20 6f 6e 74 6f   is spilled onto
92e0: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e   overflow pages.
92f0: 20 20 5e 4f 76 65 72 66 6c 6f 77 20 70 61 67 65    ^Overflow page
9300: 73 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 0a  s form a linked.
9310: 6c 69 73 74 2e 20 20 5e 54 68 65 20 66 69 72 73  list.  ^The firs
9320: 74 20 66 6f 75 72 20 62 79 74 65 73 20 6f 66 20  t four bytes of 
9330: 65 61 63 68 20 6f 76 65 72 66 6c 6f 77 20 70 61  each overflow pa
9340: 67 65 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64  ge are a big-end
9350: 69 61 6e 0a 69 6e 74 65 67 65 72 20 77 68 69 63  ian.integer whic
9360: 68 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75  h is the page nu
9370: 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74  mber of the next
9380: 20 70 61 67 65 20 69 6e 20 74 68 65 20 63 68 61   page in the cha
9390: 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a 66 6f 72 20  in, or zero.for 
93a0: 74 68 65 20 66 69 6e 61 6c 20 70 61 67 65 20 69  the final page i
93b0: 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20 5e 54  n the chain.  ^T
93c0: 68 65 20 66 69 66 74 68 20 62 79 74 65 20 74 68  he fifth byte th
93d0: 72 6f 75 67 68 20 74 68 65 20 6c 61 73 74 20 75  rough the last u
93e0: 73 61 62 6c 65 0a 62 79 74 65 20 61 72 65 20 75  sable.byte are u
93f0: 73 65 64 20 74 6f 20 68 6f 6c 64 20 6f 76 65 72  sed to hold over
9400: 66 6c 6f 77 20 63 6f 6e 74 65 6e 74 2e 3c 2f 70  flow content.</p
9410: 3e 0a 0a 3c 68 33 3e 31 2e 37 20 50 6f 69 6e 74  >..<h3>1.7 Point
9420: 65 72 20 4d 61 70 20 6f 72 20 50 74 72 6d 61 70  er Map or Ptrmap
9430: 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Pages</h3>..<p>
9440: 50 6f 69 6e 74 65 72 20 6d 61 70 20 6f 72 20 70  Pointer map or p
9450: 74 72 6d 61 70 20 70 61 67 65 73 20 61 72 65 20  trmap pages are 
9460: 65 78 74 72 61 20 70 61 67 65 73 20 69 6e 73 65  extra pages inse
9470: 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 64 61  rted into the da
9480: 74 61 62 61 73 65 0a 74 6f 20 6d 61 6b 65 20 74  tabase.to make t
9490: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  he operation of 
94a0: 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e  [auto_vacuum] an
94b0: 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  d [incremental_v
94c0: 61 63 75 75 6d 5d 20 6d 6f 64 65 73 0a 6d 6f 72  acuum] modes.mor
94d0: 65 20 65 66 66 69 63 69 65 6e 74 2e 20 20 4f 74  e efficient.  Ot
94e0: 68 65 72 20 70 61 67 65 20 74 79 70 65 73 20 69  her page types i
94f0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
9500: 79 70 69 63 61 6c 6c 79 20 68 61 76 65 20 70 6f  ypically have po
9510: 69 6e 74 65 72 73 0a 66 72 6f 6d 20 70 61 72 65  inters.from pare
9520: 6e 74 20 74 6f 20 63 68 69 6c 64 2e 20 20 46 6f  nt to child.  Fo
9530: 72 20 65 78 61 6d 70 6c 65 2c 20 61 6e 20 69 6e  r example, an in
9540: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
9550: 67 65 20 63 6f 6e 74 61 69 6e 73 20 70 6f 69 6e  ge contains poin
9560: 74 65 72 73 0a 74 6f 20 69 74 73 20 63 68 69 6c  ters.to its chil
9570: 64 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 61  d b-tree pages a
9580: 6e 64 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63  nd an overflow c
9590: 68 61 69 6e 20 68 61 73 20 61 20 70 6f 69 6e 74  hain has a point
95a0: 65 72 0a 66 72 6f 6d 20 65 61 72 6c 69 65 72 20  er.from earlier 
95b0: 74 6f 20 6c 61 74 65 72 20 6c 69 6e 6b 73 20 69  to later links i
95c0: 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20 41 20  n the chain.  A 
95d0: 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e 74  ptrmap page cont
95e0: 61 69 6e 73 20 6c 69 6e 6b 61 67 65 0a 69 6e 66  ains linkage.inf
95f0: 6f 72 6d 61 74 69 6f 6e 20 67 6f 69 6e 67 20 69  ormation going i
9600: 6e 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20 64  n the opposite d
9610: 69 72 65 63 74 69 6f 6e 2c 20 66 72 6f 6d 20 63  irection, from c
9620: 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 2e 3c  hild to parent.<
9630: 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72 6d 61 70 20  /p>..<p>^Ptrmap 
9640: 70 61 67 65 73 20 6d 75 73 74 20 65 78 69 73 74  pages must exist
9650: 20 69 6e 20 61 6e 79 20 64 61 74 61 62 61 73 65   in any database
9660: 20 66 69 6c 65 20 77 68 69 63 68 20 68 61 73 20   file which has 
9670: 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c 61 72 67 65  a non-zero.large
9680: 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  st root b-tree p
9690: 61 67 65 20 76 61 6c 75 65 20 61 74 20 6f 66 66  age value at off
96a0: 73 65 74 20 35 32 20 69 6e 20 74 68 65 20 64 61  set 52 in the da
96b0: 74 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 5e  tabase header..^
96c0: 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 72  If the largest r
96d0: 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 20  oot b-tree page 
96e0: 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20 74  value is zero, t
96f0: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
9700: 20 6d 75 73 74 20 6e 6f 74 0a 63 6f 6e 74 61 69   must not.contai
9710: 6e 20 70 74 72 6d 61 70 20 70 61 67 65 73 2e 3c  n ptrmap pages.<
9720: 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 64 61  /p>..<p>^In a da
9730: 74 61 62 61 73 65 20 77 69 74 68 20 70 74 72 6d  tabase with ptrm
9740: 61 70 20 70 61 67 65 73 2c 20 74 68 65 20 66 69  ap pages, the fi
9750: 72 73 74 20 70 74 72 6d 61 70 20 70 61 67 65 20  rst ptrmap page 
9760: 69 73 20 70 61 67 65 20 32 2e 0a 41 20 70 74 72  is page 2..A ptr
9770: 6d 61 70 20 70 61 67 65 20 63 6f 6e 73 69 73 74  map page consist
9780: 73 20 6f 66 20 61 6e 20 61 72 72 61 79 20 6f 66  s of an array of
9790: 20 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73 2e   5-byte entries.
97a0: 20 20 4c 65 74 20 4a 20 62 65 20 74 68 65 0a 6e    Let J be the.n
97b0: 75 6d 62 65 72 20 6f 66 20 35 2d 62 79 74 65 20  umber of 5-byte 
97c0: 65 6e 74 72 69 65 73 20 74 68 61 74 20 77 69 6c  entries that wil
97d0: 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75 73 61  l fit in the usa
97e0: 62 6c 65 20 73 70 61 63 65 20 6f 66 20 61 20 70  ble space of a p
97f0: 61 67 65 2e 0a 28 49 6e 20 6f 74 68 65 72 20 77  age..(In other w
9800: 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e 29 20 20 5e  ords, J=U/5.)  ^
9810: 54 68 65 20 66 69 72 73 74 20 70 74 72 6d 61 70  The first ptrmap
9820: 20 70 61 67 65 20 77 69 6c 6c 20 63 6f 6e 74 61   page will conta
9830: 69 6e 20 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a  in back pointer.
9840: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
9850: 70 61 67 65 73 20 33 20 74 68 72 6f 75 67 68 20  pages 3 through 
9860: 4a 2b 32 2c 20 69 6e 63 6c 75 73 69 76 65 2e 20  J+2, inclusive. 
9870: 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 70 6f 69   ^The second poi
9880: 6e 74 65 72 20 6d 61 70 0a 70 61 67 65 20 77 69  nter map.page wi
9890: 6c 6c 20 62 65 20 6f 6e 20 70 61 67 65 20 4a 2b  ll be on page J+
98a0: 33 20 61 6e 64 20 74 68 61 74 20 70 74 72 6d 61  3 and that ptrma
98b0: 70 20 70 61 67 65 20 77 69 6c 6c 20 70 72 6f 76  p page will prov
98c0: 69 64 65 20 62 61 63 6b 20 70 6f 69 6e 74 65 72  ide back pointer
98d0: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72  .information for
98e0: 20 70 61 67 65 73 20 4a 2b 34 20 74 68 72 6f 75   pages J+4 throu
98f0: 67 68 20 32 2a 4a 2b 33 20 69 6e 63 6c 75 73 69  gh 2*J+3 inclusi
9900: 76 65 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74  ve.  And so fort
9910: 68 20 66 6f 72 0a 74 68 65 20 65 6e 74 69 72 65  h for.the entire
9920: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
9930: 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 64  /p>..<p>^(In a d
9940: 61 74 61 62 61 73 65 20 74 68 61 74 20 75 73 65  atabase that use
9950: 73 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20  s ptrmap pages, 
9960: 61 6c 6c 20 70 61 67 65 73 20 61 74 20 6c 6f 63  all pages at loc
9970: 61 74 69 6f 6e 73 20 69 64 65 6e 74 69 66 69 65  ations identifie
9980: 64 0a 62 79 20 74 68 65 20 63 6f 6d 70 75 74 61  d.by the computa
9990: 74 69 6f 6e 20 69 6e 20 74 68 65 20 70 72 65 76  tion in the prev
99a0: 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20 6d  ious paragraph m
99b0: 75 73 74 20 62 65 20 70 74 72 6d 61 70 20 70 61  ust be ptrmap pa
99c0: 67 65 20 61 6e 64 20 6e 6f 0a 6f 74 68 65 72 20  ge and no.other 
99d0: 70 61 67 65 20 6d 61 79 20 62 65 20 61 20 70 74  page may be a pt
99e0: 72 6d 61 70 20 70 61 67 65 2e 20 20 45 78 63 65  rmap page.  Exce
99f0: 70 74 2c 20 69 66 20 74 68 65 20 62 79 74 65 2d  pt, if the byte-
9a00: 6c 6f 63 6b 20 70 61 67 65 20 68 61 70 70 65 6e  lock page happen
9a10: 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e 20 74 68 65  s to.fall on the
9a20: 20 73 61 6d 65 20 70 61 67 65 20 6e 75 6d 62 65   same page numbe
9a30: 72 20 61 73 20 61 20 70 74 72 6d 61 70 20 70 61  r as a ptrmap pa
9a40: 67 65 2c 20 74 68 65 6e 20 74 68 65 20 70 74 72  ge, then the ptr
9a50: 6d 61 70 20 69 73 20 6d 6f 76 65 64 0a 74 6f 20  map is moved.to 
9a60: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61  the following pa
9a70: 67 65 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20  ge for that one 
9a80: 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  case.)^</p>..<p>
9a90: 45 61 63 68 20 35 2d 62 79 74 65 20 65 6e 74 72  Each 5-byte entr
9aa0: 79 20 6f 6e 20 61 20 70 74 72 6d 61 70 20 70 61  y on a ptrmap pa
9ab0: 67 65 20 70 72 6f 76 69 64 65 73 20 62 61 63 6b  ge provides back
9ac0: 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f  -link informatio
9ad0: 6e 20 61 62 6f 75 74 20 0a 6f 6e 65 20 6f 66 20  n about .one of 
9ae0: 70 61 67 65 73 20 74 68 61 74 20 69 6d 6d 65 64  pages that immed
9af0: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68  iately follow th
9b00: 65 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20  e pointer map.  
9b10: 5e 28 49 66 20 70 61 67 65 20 42 20 69 73 20 61  ^(If page B is a
9b20: 0a 70 74 72 6d 61 70 20 70 61 67 65 20 74 68 65  .ptrmap page the
9b30: 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f  n back-link info
9b40: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61  rmation about pa
9b50: 67 65 20 42 2b 31 20 69 73 20 70 72 6f 76 69 64  ge B+1 is provid
9b60: 65 64 20 62 79 0a 74 68 65 20 66 69 72 73 74 20  ed by.the first 
9b70: 65 6e 74 72 79 20 6f 6e 20 74 68 65 20 70 6f 69  entry on the poi
9b80: 6e 74 65 72 20 6d 61 70 2e 20 20 49 6e 66 6f 72  nter map.  Infor
9b90: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67  mation about pag
9ba0: 65 20 42 2b 32 20 69 73 0a 70 72 6f 76 69 64 65  e B+2 is.provide
9bb0: 64 20 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20  d by the second 
9bc0: 65 6e 74 72 79 2e 20 20 41 6e 64 20 73 6f 20 66  entry.  And so f
9bd0: 6f 72 74 68 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e  orth.)^</p>..<p>
9be0: 45 61 63 68 20 35 2d 62 79 74 65 20 70 74 72 6d  Each 5-byte ptrm
9bf0: 61 70 20 65 6e 74 72 79 20 63 6f 6e 73 69 73 74  ap entry consist
9c00: 73 20 6f 66 20 6f 6e 65 20 62 79 74 65 20 6f 66  s of one byte of
9c10: 20 22 70 61 67 65 20 74 79 70 65 22 20 69 6e 66   "page type" inf
9c20: 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65  ormation.followe
9c30: 64 20 62 79 20 61 20 34 2d 62 79 74 65 20 62 69  d by a 4-byte bi
9c40: 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75  g-endian page nu
9c50: 6d 62 65 72 2e 20 20 46 69 76 65 20 70 61 67 65  mber.  Five page
9c60: 20 74 79 70 65 73 20 61 72 65 20 72 65 63 6f 67   types are recog
9c70: 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c  nized:.</p>..<ol
9c80: 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65 20 72  >.<li>A b-tree r
9c90: 6f 6f 74 20 70 61 67 65 2e 20 20 54 68 65 0a 70  oot page.  The.p
9ca0: 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c  age number shoul
9cb0: 64 20 62 65 20 7a 65 72 6f 2e 0a 3c 6c 69 3e 41  d be zero..<li>A
9cc0: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20   freelist page. 
9cd0: 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   The page number
9ce0: 20 73 68 6f 75 6c 64 20 62 65 0a 7a 65 72 6f 2e   should be.zero.
9cf0: 0a 3c 6c 69 3e 54 68 65 20 66 69 72 73 74 20 70  .<li>The first p
9d00: 61 67 65 20 6f 66 20 61 0a 63 65 6c 6c 20 70 61  age of a.cell pa
9d10: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 63  yload overflow c
9d20: 68 61 69 6e 2e 20 20 54 68 65 20 70 61 67 65 20  hain.  The page 
9d30: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 62 2d  number is the b-
9d40: 74 72 65 65 20 70 61 67 65 20 74 68 61 74 0a 63  tree page that.c
9d50: 6f 6e 74 61 69 6e 73 20 74 68 65 20 63 65 6c 6c  ontains the cell
9d60: 20 77 68 6f 73 65 20 63 6f 6e 74 65 6e 74 20 68   whose content h
9d70: 61 73 20 6f 76 65 72 66 6c 6f 77 65 64 2e 0a 3c  as overflowed..<
9d80: 6c 69 3e 41 20 70 61 67 65 20 69 6e 20 61 6e 20  li>A page in an 
9d90: 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 0a 6f  overflow chain.o
9da0: 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 66 69  ther than the fi
9db0: 72 73 74 20 70 61 67 65 2e 20 20 54 68 65 20 70  rst page.  The p
9dc0: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68  age number is th
9dd0: 65 20 70 72 69 6f 72 20 70 61 67 65 20 6f 66 20  e prior page of 
9de0: 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 63 68 61  the.overflow cha
9df0: 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f 6e 2d 72 6f  in..<li>A non-ro
9e00: 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20  ot b-tree page. 
9e10: 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72   The.page number
9e20: 20 69 73 20 74 68 65 20 70 61 72 65 6e 74 20 62   is the parent b
9e30: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 6f 6c  -tree page..</ol
9e40: 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 6e 79 20 64 61  >..<p>^In any da
9e50: 74 61 62 61 73 65 20 66 69 6c 65 20 74 68 61 74  tabase file that
9e60: 20 63 6f 6e 74 61 69 6e 73 20 70 74 72 6d 61 70   contains ptrmap
9e70: 20 70 61 67 65 73 2c 20 61 6c 6c 20 62 2d 74 72   pages, all b-tr
9e80: 65 65 20 72 6f 6f 74 20 70 61 67 65 73 20 0a 6d  ee root pages .m
9e90: 75 73 74 20 63 6f 6d 65 20 62 65 66 6f 72 65 20  ust come before 
9ea0: 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74  any non-root b-t
9eb0: 72 65 65 20 70 61 67 65 2c 20 63 65 6c 6c 20 70  ree page, cell p
9ec0: 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20  ayload overflow 
9ed0: 70 61 67 65 2c 20 6f 72 0a 66 72 65 65 6c 69 73  page, or.freelis
9ee0: 74 20 70 61 67 65 2e 20 20 54 68 69 73 20 72 65  t page.  This re
9ef0: 73 74 72 69 63 74 69 6f 6e 20 65 6e 73 75 72 65  striction ensure
9f00: 73 20 74 68 61 74 20 61 20 72 6f 6f 74 20 70 61  s that a root pa
9f10: 67 65 20 77 69 6c 6c 20 6e 65 76 65 72 0a 62 65  ge will never.be
9f20: 20 6d 6f 76 65 64 20 64 75 72 69 6e 67 20 61 6e   moved during an
9f30: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6f 72 20   auto-vacuum or 
9f40: 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75  incremental-vacu
9f50: 75 6d 2e 20 20 54 68 65 20 61 75 74 6f 2d 76 61  um.  The auto-va
9f60: 63 75 75 6d 0a 6c 6f 67 69 63 20 64 6f 65 73 20  cuum.logic does 
9f70: 6e 6f 74 20 6b 6e 6f 77 20 68 6f 77 20 74 6f 20  not know how to 
9f80: 75 70 64 61 74 65 20 74 68 65 20 72 6f 6f 74 5f  update the root_
9f90: 70 61 67 65 20 66 69 65 6c 64 20 6f 66 20 74 68  page field of th
9fa0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  e sqlite_master.
9fb0: 74 61 62 6c 65 20 61 6e 64 20 73 6f 20 69 74 20  table and so it 
9fc0: 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  is necessary to 
9fd0: 70 72 65 76 65 6e 74 20 72 6f 6f 74 20 70 61 67  prevent root pag
9fe0: 65 73 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 6f  es from being mo
9ff0: 76 65 64 0a 64 75 72 69 6e 67 20 61 6e 20 61 75  ved.during an au
a000: 74 6f 2d 76 61 63 75 75 6d 20 69 6e 20 6f 72 64  to-vacuum in ord
a010: 65 72 20 74 6f 20 70 72 65 73 65 72 76 65 20 74  er to preserve t
a020: 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20  he integrity of 
a030: 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65  the.sqlite_maste
a040: 72 20 74 61 62 6c 65 2e 20 20 5e 52 6f 6f 74 20  r table.  ^Root 
a050: 70 61 67 65 73 20 61 72 65 20 6d 6f 76 65 64 20  pages are moved 
a060: 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  to the beginning
a070: 20 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73 65   of the.database
a080: 20 66 69 6c 65 20 62 79 20 74 68 65 20 43 52 45   file by the CRE
a090: 41 54 45 20 54 41 42 4c 45 2c 20 43 52 45 41 54  ATE TABLE, CREAT
a0a0: 45 20 49 4e 44 45 58 2c 20 44 52 4f 50 20 54 41  E INDEX, DROP TA
a0b0: 42 4c 45 2c 20 61 6e 64 0a 44 52 4f 50 20 49 4e  BLE, and.DROP IN
a0c0: 44 45 58 20 6f 70 65 72 61 74 69 6f 6e 73 2e 3c  DEX operations.<
a0d0: 2f 70 3e 0a 0a 3c 68 32 3e 32 2e 30 20 53 63 68  /p>..<h2>2.0 Sch
a0e0: 65 6d 61 20 4c 61 79 65 72 3c 2f 68 32 3e 0a 0a  ema Layer</h2>..
a0f0: 3c 70 3e 54 68 65 20 66 6f 72 65 67 6f 69 6e 67  <p>The foregoing
a100: 20 74 65 78 74 20 64 65 73 63 72 69 62 65 73 20   text describes 
a110: 6c 6f 77 2d 6c 65 76 65 6c 20 61 73 70 65 63 74  low-level aspect
a120: 73 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20  s of the SQLite 
a130: 66 69 6c 65 0a 66 6f 72 6d 61 74 2e 20 20 54 68  file.format.  Th
a140: 65 20 62 2d 74 72 65 65 20 6d 65 63 68 61 6e 69  e b-tree mechani
a150: 73 6d 20 70 72 6f 76 69 64 65 73 20 61 20 70 6f  sm provides a po
a160: 77 65 72 66 75 6c 20 61 6e 64 20 65 66 66 69 63  werful and effic
a170: 69 65 6e 74 20 6d 65 61 6e 73 20 6f 66 0a 61 63  ient means of.ac
a180: 63 65 73 73 69 6e 67 20 61 20 6c 61 72 67 65 20  cessing a large 
a190: 64 61 74 61 20 73 65 74 2e 20 20 54 68 69 73 20  data set.  This 
a1a0: 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 64 65 73  section will des
a1b0: 63 72 69 62 65 20 68 6f 77 20 74 68 65 0a 6c 6f  cribe how the.lo
a1c0: 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 20 6c  w-level b-tree l
a1d0: 61 79 65 72 20 69 73 20 75 73 65 64 20 74 6f 20  ayer is used to 
a1e0: 69 6d 70 6c 65 6d 65 6e 74 20 68 69 67 68 65 72  implement higher
a1f0: 2d 6c 65 76 65 6c 20 53 51 4c 0a 63 61 70 61 62  -level SQL.capab
a200: 69 6c 69 74 69 65 73 2e 3c 2f 70 3e 0a 0a 3c 74  ilities.</p>..<t
a210: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 72  cl>hd_fragment r
a220: 65 63 6f 72 64 5f 66 6f 72 6d 61 74 20 7b 72 65  ecord_format {re
a230: 63 6f 72 64 20 66 6f 72 6d 61 74 7d 3c 2f 74 63  cord format}</tc
a240: 6c 3e 0a 3c 68 33 3e 32 2e 31 20 52 65 63 6f 72  l>.<h3>2.1 Recor
a250: 64 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c  d Format</h3>..<
a260: 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20 61  p>The data for a
a270: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65   table b-tree le
a280: 61 66 20 70 61 67 65 20 61 6e 64 20 74 68 65 20  af page and the 
a290: 6b 65 79 0a 6f 66 20 61 6e 20 69 6e 64 65 78 20  key.of an index 
a2a0: 62 2d 74 72 65 65 20 70 61 67 65 20 77 61 73 20  b-tree page was 
a2b0: 63 68 61 72 61 63 74 65 72 69 7a 65 64 20 61 62  characterized ab
a2c0: 6f 76 65 0a 61 73 20 61 6e 20 61 72 62 69 74 72  ove.as an arbitr
a2d0: 61 72 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20  ary sequence of 
a2e0: 62 79 74 65 73 2e 0a 54 68 65 20 70 72 69 6f 72  bytes..The prior
a2f0: 20 64 69 73 63 75 73 73 69 6f 6e 20 6d 65 6e 74   discussion ment
a300: 69 6f 6e 65 64 20 6f 6e 65 20 6b 65 79 20 62 65  ioned one key be
a310: 69 6e 67 20 6c 65 73 73 20 74 68 61 6e 20 61 6e  ing less than an
a320: 6f 74 68 65 72 2c 20 62 75 74 0a 64 69 64 20 6e  other, but.did n
a330: 6f 74 20 64 65 66 69 6e 65 20 77 68 61 74 20 22  ot define what "
a340: 6c 65 73 73 20 74 68 61 6e 22 20 6d 65 61 6e 74  less than" meant
a350: 2e 20 20 54 68 65 20 63 75 72 72 65 6e 74 20 73  .  The current s
a360: 65 63 74 69 6f 6e 20 77 69 6c 6c 20 61 64 64 72  ection will addr
a370: 65 73 73 0a 74 68 65 73 65 20 6f 6d 69 73 73 69  ess.these omissi
a380: 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 79  ons.</p>..<p>Pay
a390: 6c 6f 61 64 2c 20 65 69 74 68 65 72 20 74 61 62  load, either tab
a3a0: 6c 65 20 62 2d 74 72 65 65 20 64 61 74 61 20 6f  le b-tree data o
a3b0: 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6b  r index b-tree k
a3c0: 65 79 73 2c 20 0a 69 73 20 61 6c 77 61 79 73 20  eys, .is always 
a3d0: 69 6e 20 74 68 65 20 22 72 65 63 6f 72 64 20 66  in the "record f
a3e0: 6f 72 6d 61 74 22 2e 0a 54 68 65 20 72 65 63 6f  ormat"..The reco
a3f0: 72 64 20 66 6f 72 6d 61 74 20 64 65 66 69 6e 65  rd format define
a400: 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20  s a sequence of 
a410: 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e  values correspon
a420: 64 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20  ding.to columns 
a430: 69 6e 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e  in a table or in
a440: 64 65 78 2e 20 20 54 68 65 20 72 65 63 6f 72 64  dex.  The record
a450: 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65   format specifie
a460: 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  s the number.of 
a470: 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61 74  columns, the dat
a480: 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f  atype of each co
a490: 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f  lumn, and the co
a4a0: 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 63 6f  ntent of each co
a4b0: 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  lumn.</p>..<p>Th
a4c0: 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
a4d0: 6d 61 6b 65 73 20 65 78 74 65 6e 73 69 76 65 20  makes extensive 
a4e0: 75 73 65 20 6f 66 20 74 68 65 20 0a 5b 76 61 72  use of the .[var
a4f0: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
a500: 65 67 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e 74  eger] or [varint
a510: 5d 0a 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  ].representation
a520: 20 6f 66 20 36 34 2d 62 69 74 20 73 69 67 6e 65   of 64-bit signe
a530: 64 20 69 6e 74 65 67 65 72 73 20 64 65 66 69 6e  d integers defin
a540: 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c  ed above.</p>..<
a550: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
a560: 73 65 72 69 61 6c 74 79 70 65 20 7b 73 65 72 69  serialtype {seri
a570: 61 6c 20 74 79 70 65 7d 20 7b 73 65 72 69 61 6c  al type} {serial
a580: 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70   types}</tcl>.<p
a590: 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  >A record contai
a5a0: 6e 73 20 61 20 68 65 61 64 65 72 20 61 6e 64 20  ns a header and 
a5b0: 61 20 62 6f 64 79 2c 20 69 6e 20 74 68 61 74 20  a body, in that 
a5c0: 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68 65 20 68  order.  .^(The h
a5d0: 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69 74  eader begins wit
a5e0: 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e  h a single varin
a5f0: 74 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e  t which determin
a600: 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  es the total num
a610: 62 65 72 0a 6f 66 20 62 79 74 65 73 20 69 6e 20  ber.of bytes in 
a620: 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68 65  the header.  The
a630: 20 76 61 72 69 6e 74 20 76 61 6c 75 65 20 69 73   varint value is
a640: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
a650: 20 68 65 61 64 65 72 20 69 6e 0a 62 79 74 65 73   header in.bytes
a660: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73   including the s
a670: 69 7a 65 20 76 61 72 69 6e 74 20 69 74 73 65 6c  ize varint itsel
a680: 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67  f.)^  ^Following
a690: 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
a6a0: 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65   are.one or more
a6b0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69   additional vari
a6c0: 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c  nts, one per col
a6d0: 75 6d 6e 2e 20 20 54 68 65 73 65 20 61 64 64 69  umn.  These addi
a6e0: 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a 61  tional varints.a
a6f0: 72 65 20 63 61 6c 6c 65 64 20 22 73 65 72 69 61  re called "seria
a700: 6c 20 74 79 70 65 22 20 6e 75 6d 62 65 72 73 20  l type" numbers 
a710: 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65 20 74 68  and.determine th
a720: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65 61  e datatype of ea
a730: 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72  ch column, accor
a740: 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c  ding to the foll
a750: 6f 77 69 6e 67 20 63 68 61 72 74 3a 3c 2f 70 3e  owing chart:</p>
a760: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 5e 28 3c 69 3e  ..<center>.^(<i>
a770: 53 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65  Serial Type Code
a780: 73 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20  s Of The Record 
a790: 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
a7a0: 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
a7b0: 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
a7c0: 3c 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c  <th>Serial Type<
a7d0: 74 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c  th>Content Size<
a7e0: 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c  th>Meaning.<tr><
a7f0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a800: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
a810: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a820: 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69  =center>0<td ali
a830: 67 6e 3d 6c 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74  gn=left>.NULL.<t
a840: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a850: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
a860: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a870: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
a880: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69  align=left>.8-bi
a890: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
a8a0: 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74  t integer.<tr><t
a8b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a8c0: 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76  gn=center>2<td v
a8d0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a8e0: 63 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67  center>2<td alig
a8f0: 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69  n=left>.Big-endi
a900: 61 6e 20 31 36 2d 62 69 74 20 74 77 6f 73 2d 63  an 16-bit twos-c
a910: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
a920: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
a930: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a940: 72 3e 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>3<td valign=to
a950: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33  p align=center>3
a960: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a970: 42 69 67 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69  Big-endian 24-bi
a980: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
a990: 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74  t integer.<tr><t
a9a0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a9b0: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76  gn=center>4<td v
a9c0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a9d0: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
a9e0: 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69  n=left>.Big-endi
a9f0: 61 6e 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63  an 32-bit twos-c
aa00: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
aa10: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
aa20: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
aa30: 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>5<td valign=to
aa40: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36  p align=center>6
aa50: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
aa60: 42 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69  Big-endian 48-bi
aa70: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
aa80: 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74  t integer.<tr><t
aa90: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
aaa0: 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76  gn=center>6<td v
aab0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
aac0: 63 65 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67  center>8<td alig
aad0: 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69  n=left>.Big-endi
aae0: 61 6e 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63  an 64-bit twos-c
aaf0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
ab00: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
ab10: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ab20: 72 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>7<td valign=to
ab30: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
ab40: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
ab50: 42 69 67 2d 65 6e 64 69 61 6e 20 49 45 45 45 20  Big-endian IEEE 
ab60: 37 35 34 2d 32 30 30 38 20 36 34 2d 62 69 74 20  754-2008 64-bit 
ab70: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
ab80: 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  umber.<tr><td va
ab90: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
aba0: 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67  enter>8<td valig
abb0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
abc0: 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>0<td align=le
abd0: 66 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73  ft>.Integer cons
abe0: 74 61 6e 74 20 30 2e 20 20 4f 6e 6c 79 20 61 76  tant 0.  Only av
abf0: 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65  ailable for sche
ac00: 6d 61 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20  ma format 4 and 
ac10: 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  higher..<tr><td 
ac20: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
ac30: 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c  =center>9<td val
ac40: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ac50: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
ac60: 6c 65 66 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f  left>.Integer co
ac70: 6e 73 74 61 6e 74 20 31 2e 20 20 4f 6e 6c 79 20  nstant 1.  Only 
ac80: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 63  available for sc
ac90: 68 65 6d 61 20 66 6f 72 6d 61 74 20 34 20 61 6e  hema format 4 an
aca0: 64 20 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74  d higher..<tr><t
acb0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
acc0: 67 6e 3d 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a  gn=center>10,11.
acd0: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
ace0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
acf0: 26 6e 62 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d  &nbsp;<td align=
ad00: 6c 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65  left>.<i>Not use
ad10: 64 2e 20 20 52 65 73 65 72 76 65 64 20 66 6f 72  d.  Reserved for
ad20: 20 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a   expansion.</i>.
ad30: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
ad40: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ad50: 4e 26 23 78 32 32 36 35 3b 31 32 20 61 6e 64 20  N&#x2265;12 and 
ad60: 65 76 65 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c  even.    <td val
ad70: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ad80: 6e 74 65 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64  nter>(N-12)/2<td
ad90: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 42   align=left>.A B
ada0: 4c 4f 42 20 74 68 61 74 20 69 73 20 28 4e 2d 31  LOB that is (N-1
adb0: 32 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65  2)/2 bytes in le
adc0: 6e 67 74 68 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ngth.<tr><td val
add0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ade0: 6e 74 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 33  nter>N&#x2265;13
adf0: 20 61 6e 64 20 6f 64 64 0a 20 20 20 20 3c 74 64   and odd.    <td
ae00: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
ae10: 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f  n=center>(N-13)/
ae20: 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  2<td align=left>
ae30: 0a 41 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65  .A string in the
ae40: 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69   database encodi
ae50: 6e 67 20 61 6e 64 20 28 4e 2d 31 33 29 2f 32 20  ng and (N-13)/2 
ae60: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
ae70: 0a 54 68 65 20 6e 75 6c 20 74 65 72 6d 69 6e 61  .The nul termina
ae80: 74 6f 72 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a  tor is omitted..
ae90: 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72  </table></center
aea0: 3e 29 5e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61  >)^..<p>Note tha
aeb0: 74 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65  t because of the
aec0: 20 77 61 79 20 76 61 72 69 6e 74 73 20 61 72 65   way varints are
aed0: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 68 65   defined, the he
aee0: 61 64 65 72 20 73 69 7a 65 20 76 61 72 69 6e 74  ader size varint
aef0: 0a 61 6e 64 20 73 65 72 69 61 6c 20 74 79 70 65  .and serial type
af00: 20 76 61 72 69 6e 74 73 20 77 69 6c 6c 20 75 73   varints will us
af10: 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74 20 6f 66  ually consist of
af20: 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
af30: 20 54 68 65 0a 73 65 72 69 61 6c 20 74 79 70 65   The.serial type
af40: 20 76 61 72 69 6e 74 73 20 66 6f 72 20 6c 61 72   varints for lar
af50: 67 65 20 73 74 72 69 6e 67 73 20 61 6e 64 20 42  ge strings and B
af60: 4c 4f 42 73 20 6d 69 67 68 74 20 65 78 74 65 6e  LOBs might exten
af70: 64 20 74 6f 20 74 77 6f 20 6f 72 20 74 68 72 65  d to two or thre
af80: 65 0a 62 79 74 65 20 76 61 72 69 6e 74 73 2c 20  e.byte varints, 
af90: 62 75 74 20 74 68 61 74 20 69 73 20 74 68 65 20  but that is the 
afa0: 65 78 63 65 70 74 69 6f 6e 20 72 61 74 68 65 72  exception rather
afb0: 20 74 68 61 6e 20 74 68 65 20 72 75 6c 65 2e 20   than the rule. 
afc0: 0a 54 68 65 20 76 61 72 69 6e 74 20 66 6f 72 6d  .The varint form
afd0: 61 74 20 69 73 20 76 65 72 79 20 65 66 66 69 63  at is very effic
afe0: 69 65 6e 74 20 61 74 20 63 6f 64 69 6e 67 20 74  ient at coding t
aff0: 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
b000: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61  .</p>..<p>The va
b010: 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f  lues for each co
b020: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f  lumn in the reco
b030: 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  rd immediately f
b040: 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72  ollow the header
b050: 2e 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20 66 6f  ..^(Note that fo
b060: 72 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 30  r serial types 0
b070: 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20  , 8, 9, 12, and 
b080: 31 33 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73  13, the value is
b090: 20 7a 65 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c   zero bytes in.l
b0a0: 65 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c 20 63  ength.  If all c
b0b0: 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20 74 68  olumns are of th
b0c0: 65 73 65 20 74 79 70 65 73 20 74 68 65 6e 20 74  ese types then t
b0d0: 68 65 20 62 6f 64 79 20 73 65 63 74 69 6f 6e 20  he body section 
b0e0: 6f 66 20 74 68 65 0a 72 65 63 6f 72 64 20 69 73  of the.record is
b0f0: 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c   empty.)^</p>..<
b100: 68 33 3e 32 2e 32 20 52 65 63 6f 72 64 20 53 6f  h3>2.2 Record So
b110: 72 74 20 4f 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c  rt Order</h3>..<
b120: 70 3e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 6b  p>The order of k
b130: 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
b140: 62 2d 74 72 65 65 20 69 73 20 64 65 74 65 72 6d  b-tree is determ
b150: 69 6e 65 64 20 62 79 20 74 68 65 20 73 6f 72 74  ined by the sort
b160: 20 6f 72 64 65 72 20 6f 66 0a 74 68 65 20 72 65   order of.the re
b170: 63 6f 72 64 73 20 74 68 61 74 20 74 68 65 20 6b  cords that the k
b180: 65 79 73 20 72 65 70 72 65 73 65 6e 74 2e 20 20  eys represent.  
b190: 52 65 63 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f  Record compariso
b1a0: 6e 20 70 72 6f 67 72 65 73 73 65 73 20 63 6f 6c  n progresses col
b1b0: 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20  umn.by column.  
b1c0: 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 72 65 63  Columns of a rec
b1d0: 6f 72 64 20 61 72 65 20 65 78 61 6d 69 6e 65 64  ord are examined
b1e0: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
b1f0: 67 68 74 2e 20 20 54 68 65 0a 66 69 72 73 74 20  ght.  The.first 
b200: 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  pair of columns 
b210: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 65 71 75  that are not equ
b220: 61 6c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  al determines th
b230: 65 20 72 65 6c 61 74 69 76 65 20 6f 72 64 65 72  e relative order
b240: 0a 6f 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f  .of the two reco
b250: 72 64 73 2e 20 20 54 68 65 20 73 6f 72 74 20 6f  rds.  The sort o
b260: 72 64 65 72 20 6f 66 20 69 6e 64 69 76 69 64 75  rder of individu
b270: 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73  al columns is as
b280: 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c  .follows:</p>..<
b290: 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76  ol>.<li>^(NULL v
b2a0: 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79  alues (serial ty
b2b0: 70 65 20 30 29 20 73 6f 72 74 20 66 69 72 73 74  pe 0) sort first
b2c0: 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69  .)^.<li>^(Numeri
b2d0: 63 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c  c values (serial
b2e0: 20 74 79 70 65 73 20 31 20 74 68 72 6f 75 67 68   types 1 through
b2f0: 20 39 29 20 73 6f 72 74 20 61 66 74 65 72 20 4e   9) sort after N
b300: 55 4c 4c 73 0a 20 20 20 20 20 20 61 6e 64 20 69  ULLs.      and i
b310: 6e 20 6e 75 6d 65 72 69 63 20 6f 72 64 65 72 2e  n numeric order.
b320: 29 5e 0a 3c 6c 69 3e 5e 28 54 65 78 74 20 76 61  )^.<li>^(Text va
b330: 6c 75 65 73 20 28 6f 64 64 20 73 65 72 69 61 6c  lues (odd serial
b340: 20 74 79 70 65 73 20 31 33 20 61 6e 64 20 6c 61   types 13 and la
b350: 72 67 65 72 29 20 73 6f 72 74 20 61 66 74 65 72  rger) sort after
b360: 20 6e 75 6d 65 72 69 63 0a 20 20 20 20 76 61 6c   numeric.    val
b370: 75 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ues in the order
b380: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
b390: 68 65 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c  he columns [coll
b3a0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 2e  ating function].
b3b0: 29 5e 0a 3c 6c 69 3e 5e 28 42 4c 4f 42 20 76 61  )^.<li>^(BLOB va
b3c0: 6c 75 65 73 20 28 65 76 65 6e 20 73 65 72 69 61  lues (even seria
b3d0: 6c 20 74 79 70 65 73 20 31 32 20 61 6e 64 20 6c  l types 12 and l
b3e0: 61 72 67 65 72 29 20 73 6f 72 74 20 6c 61 73 74  arger) sort last
b3f0: 20 61 6e 64 20 69 6e 20 74 68 65 20 6f 72 64 65   and in the orde
b400: 72 20 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65  r .    determine
b410: 64 20 62 79 20 6d 65 6d 63 6d 70 28 29 2e 29 5e  d by memcmp().)^
b420: 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f  .</ol>..<p>A [co
b430: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
b440: 5d 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  ] for each colum
b450: 6e 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 69  n is necessary i
b460: 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75  n order to compu
b470: 74 65 0a 74 68 65 20 6f 72 64 65 72 20 6f 66 20  te.the order of 
b480: 74 65 78 74 20 66 69 65 6c 64 73 2e 0a 5e 28 53  text fields..^(S
b490: 51 4c 69 74 65 20 64 65 66 69 6e 65 73 20 74 68  QLite defines th
b4a0: 72 65 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c  ree built-in col
b4b0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
b4c0: 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  :)^.</p>..<block
b4d0: 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72  quote><table bor
b4e0: 64 65 72 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e  der=0 cellspacin
b4f0: 67 3d 31 30 3e 0a 3c 74 72 3e 5e 3c 74 64 20 76  g=10>.<tr>^<td v
b500: 61 6c 69 67 6e 3d 74 6f 70 3e 42 49 4e 41 52 59  align=top>BINARY
b510: 0a 20 20 20 20 3c 74 64 3e 53 74 72 69 6e 67 73  .    <td>Strings
b520: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20 62 79   are compared by
b530: 74 65 20 62 79 20 62 79 74 65 20 75 73 69 6e 67  te by byte using
b540: 20 74 68 65 20 6d 65 6d 63 6d 70 28 29 20 66 75   the memcmp() fu
b550: 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 66  nction.        f
b560: 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64  rom the standard
b570: 20 43 20 6c 69 62 72 61 72 79 2e 0a 3c 74 72 3e   C library..<tr>
b580: 5e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  ^<td valign=top>
b590: 4e 4f 43 41 53 45 0a 20 20 20 20 3c 74 64 3e 4c  NOCASE.    <td>L
b5a0: 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70  ike BINARY excep
b5b0: 74 20 74 68 61 74 20 75 70 70 65 72 63 61 73 65  t that uppercase
b5c0: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
b5d0: 73 20 28 27 41 27 20 74 68 72 6f 75 67 68 20 27  s ('A' through '
b5e0: 5a 27 29 0a 20 20 20 20 20 20 20 20 61 72 65 20  Z').        are 
b5f0: 66 6f 6c 64 65 64 20 69 6e 74 6f 20 74 68 65 69  folded into thei
b600: 72 20 6c 6f 77 65 72 63 61 73 65 20 65 71 75 69  r lowercase equi
b610: 76 61 6c 65 6e 74 73 20 70 72 69 6f 72 20 74 6f  valents prior to
b620: 20 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20   running the.   
b630: 20 20 20 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e       comparison.
b640: 20 20 4e 6f 74 65 20 74 68 61 74 20 6f 6e 6c 79    Note that only
b650: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
b660: 73 20 61 72 65 20 63 61 73 65 2d 66 6f 6c 64 65  s are case-folde
b670: 64 2e 20 20 5e 4e 4f 43 41 53 45 0a 20 20 20 20  d.  ^NOCASE.    
b680: 20 20 20 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70      does not imp
b690: 6c 65 6d 65 6e 74 20 61 20 67 65 6e 65 72 61 6c  lement a general
b6a0: 20 70 75 72 70 6f 73 65 20 75 6e 69 63 6f 64 65   purpose unicode
b6b0: 20 63 61 73 65 6c 65 73 73 20 63 6f 6d 70 61 72   caseless compar
b6c0: 69 73 6f 6e 2e 0a 3c 74 72 3e 5e 3c 74 64 20 76  ison..<tr>^<td v
b6d0: 61 6c 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a  align=top>RTRIM.
b6e0: 20 20 20 20 3c 74 64 3e 4c 69 6b 65 20 42 49 4e      <td>Like BIN
b6f0: 41 52 59 20 65 78 63 65 70 74 20 74 68 61 74 20  ARY except that 
b700: 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e  spaces at the en
b710: 64 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  d of the string 
b720: 61 72 65 20 65 6c 69 64 65 64 0a 20 20 20 20 20  are elided.     
b730: 20 20 20 70 72 69 6f 72 20 74 6f 20 63 6f 6d 70     prior to comp
b740: 61 72 69 73 6f 6e 2e 0a 3c 2f 74 61 62 6c 65 3e  arison..</table>
b750: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
b760: 70 3e 5e 41 64 64 69 74 69 6f 6e 61 6c 20 61 70  p>^Additional ap
b770: 70 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66  plication-specif
b780: 69 63 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  ic collating fun
b790: 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 64  ctions can be ad
b7a0: 64 65 64 20 74 6f 0a 53 51 4c 69 74 65 20 75 73  ded to.SQLite us
b7b0: 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ing the [sqlite3
b7c0: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
b7d0: 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c  n()] interface.<
b7e0: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66  /p>..<p>^The def
b7f0: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ault collating f
b800: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
b810: 73 74 72 69 6e 67 73 20 69 73 20 42 49 4e 41 52  strings is BINAR
b820: 59 2e 0a 5e 41 6c 74 65 72 6e 61 74 69 76 65 20  Y..^Alternative 
b830: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
b840: 6f 6e 73 20 66 6f 72 20 74 61 62 6c 65 20 63 6f  ons for table co
b850: 6c 75 6d 6e 73 20 63 61 6e 20 62 65 20 73 70 65  lumns can be spe
b860: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
b870: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
b880: 74 65 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  tement using the
b890: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
b8a0: 6f 6e 20 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64  on the [column d
b8b0: 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65  efinition]..^Whe
b8c0: 6e 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e  n a column is in
b8d0: 64 65 78 65 64 2c 20 74 68 65 20 73 61 6d 65 20  dexed, the same 
b8e0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
b8f0: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  on specified in 
b900: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
b910: 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  E] statement is 
b920: 75 73 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6c  used for the col
b930: 75 6d 6e 20 69 6e 20 74 68 65 20 69 6e 64 65 78  umn in the index
b940: 2c 20 62 79 20 64 65 66 61 75 6c 74 2c 0a 74 68  , by default,.th
b950: 6f 75 67 68 20 74 68 69 73 20 63 61 6e 20 62 65  ough this can be
b960: 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e   overridden usin
b970: 67 20 61 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  g a COLLATE clau
b980: 73 65 20 69 6e 20 74 68 65 20 0a 5b 43 52 45 41  se in the .[CREA
b990: 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d  TE INDEX] statem
b9a0: 65 6e 74 2e 0a 0a 3c 68 33 3e 32 2e 33 20 52 65  ent...<h3>2.3 Re
b9b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20  presentation Of 
b9c0: 53 51 4c 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a  SQL Tables</h3>.
b9d0: 0a 3c 70 3e 45 61 63 68 20 6f 72 64 69 6e 61 72  .<p>Each ordinar
b9e0: 79 20 53 51 4c 20 74 61 62 6c 65 20 69 6e 20 74  y SQL table in t
b9f0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
ba00: 6d 61 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ma is represente
ba10: 64 20 6f 6e 2d 64 69 73 6b 0a 62 79 20 61 20 74  d on-disk.by a t
ba20: 61 62 6c 65 20 62 2d 74 72 65 65 2e 20 20 45 61  able b-tree.  Ea
ba30: 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  ch entry in the 
ba40: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 72  table b-tree cor
ba50: 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f  responds to a ro
ba60: 77 0a 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62  w.of the SQL tab
ba70: 6c 65 2e 20 20 54 68 65 20 5b 72 6f 77 69 64 5d  le.  The [rowid]
ba80: 20 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c   of the SQL tabl
ba90: 65 20 69 73 20 74 68 65 20 36 34 2d 62 69 74 20  e is the 64-bit 
baa0: 73 69 67 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b  signed.integer k
bab0: 65 79 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72  ey for each entr
bac0: 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  y in the table b
bad0: 2d 74 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  -tree.</p>..<p>T
bae0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61  he content of ea
baf0: 63 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77  ch SQL table row
bb00: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
bb10: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
bb20: 62 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69  by.first combini
bb30: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ng the values in
bb40: 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c   the various col
bb50: 75 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65  umns into a byte
bb60: 20 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65   array.in the re
bb70: 63 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65  cord format, the
bb80: 6e 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62  n storing that b
bb90: 79 74 65 20 61 72 72 61 79 20 61 73 20 74 68 65  yte array as the
bba0: 20 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65   payload in.an e
bbb0: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
bbc0: 65 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20  e b-tree.  ^The 
bbd0: 6f 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20  order of values 
bbe0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 73  in the record is
bbf0: 0a 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65  .the same as the
bc00: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e   order of column
bc10: 73 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62  s in the SQL tab
bc20: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e  le definition..^
bc30: 57 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  When an SQL tabl
bc40: 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20  e that includes 
bc50: 61 6e 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an.[INTEGER PRIM
bc60: 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20  ARY KEY] column 
bc70: 28 77 68 69 63 68 20 61 6c 69 61 73 65 73 20 74  (which aliases t
bc80: 68 65 20 5b 72 6f 77 69 64 5d 29 20 74 68 65 6e  he [rowid]) then
bc90: 20 74 68 61 74 0a 63 6f 6c 75 6d 6e 20 61 70 70   that.column app
bca0: 65 61 72 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ears in the reco
bcb0: 72 64 20 61 73 20 61 20 4e 55 4c 4c 20 76 61 6c  rd as a NULL val
bcc0: 75 65 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c  ue.  ^SQLite wil
bcd0: 6c 20 61 6c 77 61 79 73 20 75 73 65 0a 74 68 65  l always use.the
bce0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6b 65   table b-tree ke
bcf0: 79 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  y rather than th
bd00: 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 68 65  e NULL value whe
bd10: 6e 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68  n referencing th
bd20: 65 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  e.[INTEGER PRIMA
bd30: 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c  RY KEY] column.<
bd40: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  /p>..<p>^If the 
bd50: 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 61 20  [affinity] of a 
bd60: 63 6f 6c 75 6d 6e 20 69 73 20 52 45 41 4c 20 61  column is REAL a
bd70: 6e 64 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 63  nd that column c
bd80: 6f 6e 74 61 69 6e 73 20 61 0a 76 61 6c 75 65 20  ontains a.value 
bd90: 74 68 61 74 20 63 61 6e 20 62 65 20 63 6f 6e 76  that can be conv
bda0: 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65  erted to an inte
bdb0: 67 65 72 20 77 69 74 68 6f 75 74 20 6c 6f 73 73  ger without loss
bdc0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a   of information.
bdd0: 28 69 66 20 74 68 65 20 76 61 6c 75 65 20 63 6f  (if the value co
bde0: 6e 74 61 69 6e 73 20 6e 6f 20 66 72 61 63 74 69  ntains no fracti
bdf0: 6f 6e 61 6c 20 70 61 72 74 20 61 6e 64 20 69 73  onal part and is
be00: 20 6e 6f 74 20 74 6f 6f 20 6c 61 72 67 65 20 74   not too large t
be10: 6f 20 62 65 0a 72 65 70 72 65 73 65 6e 74 65 64  o be.represented
be20: 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 20   as an integer) 
be30: 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20  then the column 
be40: 6d 61 79 20 62 65 20 73 74 6f 72 65 64 20 69 6e  may be stored in
be50: 20 74 68 65 20 72 65 63 6f 72 64 0a 61 73 20 61   the record.as a
be60: 6e 20 69 6e 74 65 67 65 72 2e 20 20 5e 53 51 4c  n integer.  ^SQL
be70: 69 74 65 20 77 69 6c 6c 20 63 6f 6e 76 65 72 74  ite will convert
be80: 20 74 68 65 20 76 61 6c 75 65 20 62 61 63 6b 20   the value back 
be90: 74 6f 20 66 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e  to floating.poin
bea0: 74 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  t when extractin
beb0: 67 20 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65  g it from the re
bec0: 63 6f 72 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32  cord.</p>..<h3>2
bed0: 2e 34 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f  .4 Representatio
bee0: 6e 20 6f 66 20 57 49 54 48 4f 55 54 20 52 4f 57  n of WITHOUT ROW
bef0: 49 44 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a  ID Tables</h3>..
bf00: 3c 70 3e 49 66 20 61 6e 20 53 51 4c 20 74 61 62  <p>If an SQL tab
bf10: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 75 73  le is created us
bf20: 69 6e 67 20 74 68 65 20 22 57 49 54 48 4f 55 54  ing the "WITHOUT
bf30: 20 52 4f 57 49 44 22 20 63 6c 61 75 73 65 20 61   ROWID" clause a
bf40: 74 20 74 68 65 0a 65 6e 64 20 6f 66 20 69 74 73  t the.end of its
bf50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
bf60: 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
bf70: 61 74 20 74 61 62 6c 65 20 69 73 20 61 20 5b 57  at table is a [W
bf80: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 0a 74 61  ITHOUT ROWID].ta
bf90: 62 6c 65 20 61 6e 64 20 75 73 65 73 20 61 20 64  ble and uses a d
bfa0: 69 66 66 65 72 65 6e 74 20 6f 6e 2d 64 69 73 6b  ifferent on-disk
bfb0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
bfc0: 20 20 41 20 57 49 54 48 4f 55 54 20 52 4f 57 49    A WITHOUT ROWI
bfd0: 44 0a 74 61 62 6c 65 20 75 73 65 73 20 61 6e 20  D.table uses an 
bfe0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 72 61 74  index b-tree rat
bff0: 68 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65  her than a table
c000: 20 62 2d 74 72 65 65 20 66 6f 72 20 73 74 6f 72   b-tree for stor
c010: 61 67 65 2e 0a 54 68 65 20 6b 65 79 20 66 6f 72  age..The key for
c020: 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74   each entry in t
c030: 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  he WITHOUT ROWID
c040: 20 62 2d 74 72 65 65 20 69 73 20 61 20 72 65 63   b-tree is a rec
c050: 6f 72 64 20 63 6f 6d 70 6f 73 65 64 0a 6f 66 20  ord composed.of 
c060: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  the columns of t
c070: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
c080: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 72  ollowed by all r
c090: 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73  emaining columns
c0a0: 20 6f 66 0a 74 68 65 20 74 61 62 6c 65 2e 20 20   of.the table.  
c0b0: 54 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  The primary key 
c0c0: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c0d0: 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n the order they
c0e0: 20 74 68 65 79 20 77 65 72 65 0a 64 65 63 6c 61   they were.decla
c0f0: 72 65 64 20 69 6e 20 74 68 65 20 50 52 49 4d 41  red in the PRIMA
c100: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61 6e  RY KEY clause an
c110: 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
c120: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c130: 6e 0a 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n.the order they
c140: 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 43 52   occur in the CR
c150: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
c160: 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 48 65 6e 63 65  ment...<p>^Hence
c170: 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e  , the content en
c180: 63 6f 64 69 6e 67 20 66 6f 72 20 61 20 57 49 54  coding for a WIT
c190: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
c1a0: 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20   is the same.as 
c1b0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f  the content enco
c1c0: 64 69 6e 67 20 66 6f 72 20 61 6e 20 6f 72 64 69  ding for an ordi
c1d0: 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65  nary rowid table
c1e0: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
c1f0: 65 0a 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e.order of the c
c200: 6f 6c 75 6d 6e 73 20 69 73 20 72 65 61 72 72 61  olumns is rearra
c210: 6e 67 65 64 20 73 6f 20 74 68 61 74 20 50 52 49  nged so that PRI
c220: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
c230: 20 63 6f 6d 65 0a 66 69 72 73 74 2c 20 61 6e 64   come.first, and
c240: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
c250: 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
c260: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
c270: 65 65 20 72 61 74 68 65 72 0a 74 68 61 6e 20 61  ee rather.than a
c280: 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 61 20  s the data in a 
c290: 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 0a 5e 54  table b-tree..^T
c2a0: 68 65 20 73 70 65 63 69 61 6c 20 65 6e 63 6f 64  he special encod
c2b0: 69 6e 67 20 72 75 6c 65 73 20 66 6f 72 20 63 6f  ing rules for co
c2c0: 6c 75 6d 6e 73 20 77 69 74 68 20 52 45 41 4c 20  lumns with REAL 
c2d0: 61 66 66 69 6e 69 74 79 0a 61 70 70 6c 79 20 74  affinity.apply t
c2e0: 6f 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  o WITHOUT ROWID 
c2f0: 74 61 62 6c 65 73 20 74 68 65 20 73 61 6d 65 20  tables the same 
c300: 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20  as they do with 
c310: 72 6f 77 69 64 20 74 61 62 6c 65 73 2e 0a 0a 3c  rowid tables...<
c320: 68 33 3e 32 2e 35 20 52 65 70 72 65 73 65 6e 74  h3>2.5 Represent
c330: 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 49 6e 64  ation Of SQL Ind
c340: 69 63 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45  ices</h3>..<p>^E
c350: 61 63 68 20 53 51 4c 20 69 6e 64 65 78 2c 20 77  ach SQL index, w
c360: 68 65 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c  hether explicitl
c370: 79 20 64 65 63 6c 61 72 65 64 20 76 69 61 20 61  y declared via a
c380: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
c390: 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 69 6d 70  statement.or imp
c3a0: 6c 69 65 64 20 62 79 20 61 20 55 4e 49 51 55 45  lied by a UNIQUE
c3b0: 20 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20   or PRIMARY KEY 
c3c0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 63 6f 72 72  constraint, corr
c3d0: 65 73 70 6f 6e 64 73 20 74 6f 20 61 6e 20 0a 69  esponds to an .i
c3e0: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74  ndex b-tree in t
c3f0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
c400: 2e 0a 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  ..^Each entry in
c410: 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65   the index b-tre
c420: 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e corresponds to
c430: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e   a single row in
c440: 20 74 68 65 20 0a 61 73 73 6f 63 69 61 74 65 64   the .associated
c450: 20 53 51 4c 20 74 61 62 6c 65 2e 0a 5e 54 68 65   SQL table..^The
c460: 20 6b 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78   key to an index
c470: 20 62 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63   b-tree is.a rec
c480: 6f 72 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ord composed of 
c490: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  the columns that
c4a0: 20 61 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78   are being index
c4b0: 65 64 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  ed followed by t
c4c0: 68 65 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f  he.key of the co
c4d0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
c4e0: 65 20 72 6f 77 2e 20 20 46 6f 72 20 6f 72 64 69  e row.  For ordi
c4f0: 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 74 68 65  nary tables, the
c500: 20 72 6f 77 20 6b 65 79 20 69 73 0a 74 68 65 20   row key is.the 
c510: 5b 72 6f 77 69 64 5d 2c 20 61 6e 64 20 66 6f 72  [rowid], and for
c520: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
c530: 20 74 61 62 6c 65 73 20 74 68 65 20 72 6f 77 20   tables the row 
c540: 6b 65 79 20 69 73 20 74 68 65 20 50 52 49 4d 41  key is the PRIMA
c550: 52 59 20 4b 45 59 2e 0a 42 65 63 61 75 73 65 20  RY KEY..Because 
c560: 65 76 65 72 79 20 72 6f 77 20 69 6e 20 74 68 65  every row in the
c570: 20 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69   table has a uni
c580: 71 75 65 20 72 6f 77 20 6b 65 79 2c 0a 61 6c 6c  que row key,.all
c590: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
c5a0: 78 20 61 72 65 20 75 6e 69 71 75 65 2e 3c 2f 70  x are unique.</p
c5b0: 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 6e 6f 72 6d  >..<p>^In a norm
c5c0: 61 6c 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20  al index, there 
c5d0: 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20  is a one-to-one 
c5e0: 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20  mapping between 
c5f0: 72 6f 77 73 20 69 6e 20 61 20 0a 74 61 62 6c 65  rows in a .table
c600: 20 61 6e 64 20 65 6e 74 72 69 65 73 20 69 6e 20   and entries in 
c610: 65 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63  each index assoc
c620: 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20  iated with that 
c630: 74 61 62 6c 65 2e 0a 5e 48 6f 77 65 76 65 72 2c  table..^However,
c640: 20 69 6e 20 61 20 5b 70 61 72 74 69 61 6c 20 69   in a [partial i
c650: 6e 64 65 78 5d 2c 20 74 68 65 20 69 6e 64 65 78  ndex], the index
c660: 20 62 2d 74 72 65 65 20 6f 6e 6c 79 20 63 6f 6e   b-tree only con
c670: 74 61 69 6e 73 20 65 6e 74 72 69 65 73 0a 63 6f  tains entries.co
c680: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74  rresponding to t
c690: 61 62 6c 65 20 72 6f 77 73 20 66 6f 72 20 77 68  able rows for wh
c6a0: 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  ich the WHERE cl
c6b0: 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ause expression 
c6c0: 6f 6e 20 74 68 65 0a 43 52 45 41 54 45 20 49 4e  on the.CREATE IN
c6d0: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73  DEX statement is
c6e0: 20 74 72 75 65 2e 0a 5e 43 6f 72 72 65 73 70 6f   true..^Correspo
c6f0: 6e 64 69 6e 67 20 72 6f 77 73 20 69 6e 20 74 68  nding rows in th
c700: 65 20 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c  e index and tabl
c710: 65 20 62 2d 74 72 65 65 73 20 73 68 61 72 65 20  e b-trees share 
c720: 74 68 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 6f  the same rowid.o
c730: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61  r primary key va
c740: 6c 75 65 73 20 61 6e 64 20 63 6f 6e 74 61 69 6e  lues and contain
c750: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
c760: 66 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20  for all indexed 
c770: 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68  columns.</p>..<h
c780: 34 3e 32 2e 35 2e 31 20 53 75 70 70 72 65 73 73  4>2.5.1 Suppress
c790: 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74  ion of redundant
c7a0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48   columns in WITH
c7b0: 4f 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64  OUT ROWID second
c7c0: 61 72 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68 34  ary indexed.</h4
c7d0: 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e 64 65  >..<p>In an inde
c7e0: 78 20 6f 6e 20 61 20 57 49 54 48 4f 55 54 20 52  x on a WITHOUT R
c7f0: 4f 57 49 44 20 74 61 62 6c 65 2c 20 69 66 20 6f  OWID table, if o
c800: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  ne or more of th
c810: 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 61 62  e columns.of tab
c820: 6c 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  le PRIMARY KEY a
c830: 72 65 20 61 6c 73 6f 20 63 6f 6c 75 6d 6e 73 20  re also columns 
c840: 6f 66 20 74 68 65 20 69 6e 64 65 78 2c 20 74 68  of the index, th
c850: 65 6e 20 74 68 65 0a 69 6e 64 65 78 65 64 20 63  en the.indexed c
c860: 6f 6c 75 6d 6e 20 69 73 20 6e 6f 74 20 72 65 70  olumn is not rep
c870: 65 61 74 65 64 20 69 6e 20 74 68 65 20 74 61 62  eated in the tab
c880: 6c 65 2d 6b 65 79 20 73 75 66 66 69 78 20 6f 6e  le-key suffix on
c890: 20 74 68 65 20 65 6e 64 20 6f 66 0a 74 68 65 20   the end of.the 
c8a0: 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 20 41  index record.  A
c8b0: 73 20 61 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f  s an example, co
c8c0: 6e 73 69 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f  nsider the follo
c8d0: 77 69 6e 67 20 53 51 4c 3a 0a 0a 3c 62 6c 6f 63  wing SQL:..<bloc
c8e0: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
c8f0: 41 54 45 20 54 41 42 4c 45 20 65 78 32 35 28 61  ATE TABLE ex25(a
c900: 2c 62 2c 63 2c 64 2c 65 2c 50 52 49 4d 41 52 59  ,b,c,d,e,PRIMARY
c910: 20 4b 45 59 28 64 2c 63 2c 61 29 29 20 57 49 54   KEY(d,c,a)) WIT
c920: 48 4f 55 54 20 72 6f 77 69 64 3b 0a 43 52 45 41  HOUT rowid;.CREA
c930: 54 45 20 49 4e 44 45 58 20 65 78 32 35 63 65 20  TE INDEX ex25ce 
c940: 4f 4e 20 65 78 32 35 28 63 2c 65 29 3b 0a 43 52  ON ex25(c,e);.CR
c950: 45 41 54 45 20 49 4e 44 45 58 20 65 78 32 35 61  EATE INDEX ex25a
c960: 63 64 65 20 4f 4e 20 65 78 32 35 28 61 2c 63 2c  cde ON ex25(a,c,
c970: 64 2c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  d,e);.</pre></bl
c980: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 61  ockquote>..<p>Ea
c990: 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 65 78  ch row in the ex
c9a0: 32 35 63 65 20 69 6e 64 65 78 20 6f 66 20 74 68  25ce index of th
c9b0: 65 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  e example above 
c9c0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 72 65  consists of a re
c9d0: 63 6f 72 64 0a 63 6f 6e 74 61 69 6e 69 6e 67 20  cord.containing 
c9e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
c9f0: 6c 75 6d 6e 73 3a 20 63 2c 20 65 2c 20 64 2c 20  lumns: c, e, d, 
ca00: 61 2e 20 20 54 68 65 20 66 69 72 73 74 20 74 77  a.  The first tw
ca10: 6f 20 63 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68  o columns are.th
ca20: 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20  e columns being 
ca30: 69 6e 64 65 78 65 64 2c 20 63 20 61 6e 64 20 65  indexed, c and e
ca40: 2e 20 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67  .  The remaining
ca50: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 74 68 65   columns are the
ca60: 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 66 20   primary.key of 
ca70: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
ca80: 67 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 4e 6f  g table row.  No
ca90: 72 6d 61 6c 6c 79 2c 20 74 68 65 20 70 72 69 6d  rmally, the prim
caa0: 61 72 79 20 6b 65 79 20 77 6f 75 6c 64 20 62 65  ary key would be
cab0: 0a 63 6f 6c 75 6d 6e 73 20 64 2c 20 63 2c 20 61  .columns d, c, a
cac0: 6e 64 20 61 2c 20 62 75 74 20 62 65 63 61 75 73  nd a, but becaus
cad0: 65 20 63 6f 6c 75 6d 6e 20 63 20 61 6c 72 65 61  e column c alrea
cae0: 64 79 20 61 70 70 65 61 72 73 20 65 61 72 6c 69  dy appears earli
caf0: 65 72 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 2c  er in the.index,
cb00: 20 69 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66   it is omitted f
cb10: 72 6f 6d 20 74 68 65 20 6b 65 79 20 73 75 66 66  rom the key suff
cb20: 69 78 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 74  ix.</p>..<p>In t
cb30: 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65 20  he extreme case 
cb40: 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e  where the column
cb50: 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  s being indexed 
cb60: 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  cover all column
cb70: 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  s.of the PRIMARY
cb80: 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20   KEY, the index 
cb90: 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20  will consist of 
cba0: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
cbb0: 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20   being.indexed. 
cbc0: 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65 78   The ex25acde ex
cbd0: 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f  ample above demo
cbe0: 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 20 20  nstrates this.  
cbf0: 45 61 63 68 20 65 6e 74 72 79 20 69 6e 0a 74 68  Each entry in.th
cc00: 65 20 65 78 32 35 61 63 64 65 20 69 6e 64 65 78  e ex25acde index
cc10: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 6c   consists of onl
cc20: 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61 2c  y the columns a,
cc30: 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c 20 69 6e   c, d, and e, in
cc40: 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c 2f 70 3e   that.order.</p>
cc50: 0a 0a 3c 70 3e 54 68 65 20 73 75 70 70 72 65 73  ..<p>The suppres
cc60: 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e  sion of redundan
cc70: 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  t columns in the
cc80: 20 6b 65 79 20 73 75 66 66 69 78 20 6f 66 20 61   key suffix of a
cc90: 6e 20 69 6e 64 65 78 0a 65 6e 74 72 79 20 6f 6e  n index.entry on
cca0: 6c 79 20 6f 63 63 75 72 73 20 69 6e 20 57 49 54  ly occurs in WIT
ccb0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
ccc0: 73 2e 20 20 49 6e 20 61 6e 20 6f 72 64 69 6e 61  s.  In an ordina
ccd0: 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 0a  ry rowid table,.
cce0: 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79 20  the index entry 
ccf0: 61 6c 77 61 79 73 20 65 6e 64 73 20 77 69 74 68  always ends with
cd00: 20 74 68 65 20 72 6f 77 69 64 20 65 76 65 6e 20   the rowid even 
cd10: 69 66 20 74 68 65 20 5b 49 4e 54 45 47 45 52 20  if the [INTEGER 
cd20: 50 52 49 4d 41 52 59 20 4b 45 59 5d 0a 63 6f 6c  PRIMARY KEY].col
cd30: 75 6d 6e 20 69 73 20 6f 6e 65 20 6f 66 20 74 68  umn is one of th
cd40: 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20  e columns being 
cd50: 69 6e 64 65 78 65 64 2e 3c 2f 70 3e 0a 0a 3c 74  indexed.</p>..<t
cd60: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
cd70: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7b 73 71  qlite_master {sq
cd80: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 7b 73 71  lite_master} {sq
cd90: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
cda0: 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e 36  e}</tcl>.<h3>2.6
cdb0: 20 53 74 6f 72 61 67 65 20 4f 66 20 54 68 65 20   Storage Of The 
cdc0: 53 51 4c 20 44 61 74 61 62 61 73 65 20 53 63 68  SQL Database Sch
cdd0: 65 6d 61 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 50 61  ema</h3>..<p>^Pa
cde0: 67 65 20 31 20 6f 66 20 61 20 64 61 74 61 62 61  ge 1 of a databa
cdf0: 73 65 20 66 69 6c 65 20 69 73 20 74 68 65 20 72  se file is the r
ce00: 6f 6f 74 20 70 61 67 65 20 6f 66 20 61 20 74 61  oot page of a ta
ce10: 62 6c 65 20 62 2d 74 72 65 65 20 74 68 61 74 0a  ble b-tree that.
ce20: 68 6f 6c 64 73 20 61 20 73 70 65 63 69 61 6c 20  holds a special 
ce30: 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 73 71 6c  table named "sql
ce40: 69 74 65 5f 6d 61 73 74 65 72 22 20 28 6f 72 20  ite_master" (or 
ce50: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
ce60: 74 65 72 22 20 69 6e 0a 74 68 65 20 63 61 73 65  ter" in.the case
ce70: 20 6f 66 20 61 20 54 45 4d 50 20 64 61 74 61 62   of a TEMP datab
ce80: 61 73 65 29 20 77 68 69 63 68 20 73 74 6f 72 65  ase) which store
ce90: 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 64  s the complete.d
cea0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
ceb0: 20 5e 28 54 68 65 20 73 74 72 75 63 74 75 72 65   ^(The structure
cec0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   of the sqlite_m
ced0: 61 73 74 65 72 20 74 61 62 6c 65 20 69 73 20 61  aster table is a
cee0: 73 0a 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s.if it had been
cef0: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74   created using t
cf00: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c  he following SQL
cf10: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
cf20: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
cf30: 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73  TABLE sqlite_mas
cf40: 74 65 72 28 0a 20 20 74 79 70 65 20 74 65 78 74  ter(.  type text
cf50: 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74 2c 0a 20  ,.  name text,. 
cf60: 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 0a   tbl_name text,.
cf70: 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
cf80: 65 72 2c 0a 20 20 73 71 6c 20 74 65 78 74 0a 29  er,.  sql text.)
cf90: 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
cfa0: 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  uote>)^..<p>^The
cfb0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
cfc0: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  able contains on
cfd0: 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 74  e row for each t
cfe0: 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69 65  able, index, vie
cff0: 77 2c 0a 61 6e 64 20 74 72 69 67 67 65 72 20 28  w,.and trigger (
d000: 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 22 6f 62  collectively "ob
d010: 6a 65 63 74 73 22 29 20 69 6e 20 74 68 65 20 64  jects") in the d
d020: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
d030: 65 78 63 65 70 74 20 74 68 65 72 65 0a 69 73 20  except there.is 
d040: 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65  no entry for the
d050: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
d060: 61 62 6c 65 20 69 74 73 65 6c 66 2e 20 20 5e 54  able itself.  ^T
d070: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
d080: 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 73 20   table.contains 
d090: 65 6e 74 72 69 65 73 20 66 6f 72 20 5b 69 6e 74  entries for [int
d0a0: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
d0b0: 65 63 74 73 5d 20 69 6e 20 61 64 64 69 74 69 6f  ects] in additio
d0c0: 6e 20 74 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e  n to application
d0d0: 2d 0a 61 6e 64 20 70 72 6f 67 72 61 6d 6d 65 72  -.and programmer
d0e0: 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 73  -defined objects
d0f0: 2e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c  ....<p>^(The sql
d100: 69 74 65 5f 6d 61 73 74 65 72 2e 74 79 70 65 20  ite_master.type 
d110: 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20 6f  column will be o
d120: 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne.of the follow
d130: 69 6e 67 20 74 65 78 74 20 73 74 72 69 6e 67 73  ing text strings
d140: 3a 20 20 27 74 61 62 6c 65 27 2c 20 27 69 6e 64  :  'table', 'ind
d150: 65 78 27 2c 20 27 76 69 65 77 27 2c 20 6f 72 20  ex', 'view', or 
d160: 27 74 72 69 67 67 65 72 27 0a 61 63 63 6f 72 64  'trigger'.accord
d170: 69 6e 67 20 74 6f 20 74 68 65 20 74 79 70 65 20  ing to the type 
d180: 6f 66 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65  of object define
d190: 64 2e 20 20 54 68 65 20 27 74 61 62 6c 65 27 20  d.  The 'table' 
d1a0: 73 74 72 69 6e 67 20 69 73 20 75 73 65 64 0a 66  string is used.f
d1b0: 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e 61 72 79  or both ordinary
d1c0: 20 61 6e 64 20 5b 76 69 72 74 75 61 6c 20 74 61   and [virtual ta
d1d0: 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a 0a 3c 2f  bles].)^</p>..</
d1e0: 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d  p>^(The sqlite_m
d1f0: 61 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c 75 6d  aster.name colum
d200: 6e 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68 65 20  n will hold the 
d210: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a 65  name of the obje
d220: 63 74 2e 29 5e 0a 5e 28 5b 55 4e 49 51 55 45 5d  ct.)^.^([UNIQUE]
d230: 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45   and [PRIMARY KE
d240: 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f  Y] constraints o
d250: 6e 20 74 61 62 6c 65 73 20 63 61 75 73 65 20 53  n tables cause S
d260: 51 4c 69 74 65 20 74 6f 20 63 72 65 61 74 65 0a  QLite to create.
d270: 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 69 63 65  [internal indice
d280: 73 5d 20 77 69 74 68 20 6e 61 6d 65 73 20 6f 66  s] with names of
d290: 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69 74   the form "sqlit
d2a0: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c  e_autoindex_TABL
d2b0: 45 5f 4e 22 0a 77 68 65 72 65 20 54 41 42 4c 45  E_N".where TABLE
d2c0: 20 69 73 20 72 65 70 6c 61 63 65 64 20 62 79 20   is replaced by 
d2d0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
d2e0: 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
d2f0: 69 6e 73 20 74 68 65 0a 63 6f 6e 73 74 72 61 69  ins the.constrai
d300: 6e 74 20 61 6e 64 20 4e 20 69 73 20 61 6e 20 69  nt and N is an i
d310: 6e 74 65 67 65 72 20 62 65 67 69 6e 6e 69 6e 67  nteger beginning
d320: 20 77 69 74 68 20 31 20 61 6e 64 20 69 6e 63 72   with 1 and incr
d330: 65 61 73 69 6e 67 20 62 79 20 6f 6e 65 0a 77 69  easing by one.wi
d340: 74 68 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69  th each constrai
d350: 6e 74 20 73 65 65 6e 20 69 6e 20 74 68 65 20 74  nt seen in the t
d360: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
d370: 29 5e 0a 5e 28 49 6e 20 61 20 5b 57 49 54 48 4f  )^.^(In a [WITHO
d380: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c  UT ROWID] table,
d390: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 71 6c   there is no sql
d3a0: 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74 72 79  ite_master entry
d3b0: 20 66 6f 72 20 74 68 65 0a 50 52 49 4d 41 52 59   for the.PRIMARY
d3c0: 20 4b 45 59 2c 20 62 75 74 20 74 68 65 20 22 73   KEY, but the "s
d3d0: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
d3e0: 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20 69 73  TABLE_N" name is
d3f0: 20 73 65 74 20 61 73 69 64 65 0a 66 6f 72 20 74   set aside.for t
d400: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  he PRIMARY KEY a
d410: 73 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 5f  s if the sqlite_
d420: 6d 61 73 74 65 72 20 65 6e 74 72 79 20 64 69 64  master entry did
d430: 20 65 78 69 73 74 2e 20 20 54 68 69 73 0a 77 69   exist.  This.wi
d440: 6c 6c 20 61 66 66 65 63 74 20 74 68 65 20 6e 75  ll affect the nu
d450: 6d 62 65 72 69 6e 67 20 6f 66 20 73 75 62 73 65  mbering of subse
d460: 71 75 65 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e  quent UNIQUE con
d470: 73 74 72 61 69 6e 74 73 2e 29 5e 0a 5e 54 68 65  straints.)^.^The
d480: 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   "sqlite_autoind
d490: 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65  ex_TABLE_N" name
d4a0: 20 69 73 20 6e 65 76 65 72 20 61 6c 6c 6f 63 61   is never alloca
d4b0: 74 65 64 20 66 6f 72 20 61 6e 0a 5b 49 4e 54 45  ted for an.[INTE
d4c0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
d4d0: 2c 20 65 69 74 68 65 72 20 69 6e 20 72 6f 77 69  , either in rowi
d4e0: 64 20 74 61 62 6c 65 73 20 6f 72 20 57 49 54 48  d tables or WITH
d4f0: 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73  OUT ROWID tables
d500: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  ..</p>..<p>The s
d510: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 62 6c  qlite_master.tbl
d520: 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c  _name column hol
d530: 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ds the name of a
d540: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 0a 74   table or view.t
d550: 68 61 74 20 74 68 65 20 6f 62 6a 65 63 74 20 69  hat the object i
d560: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
d570: 68 2e 20 20 5e 46 6f 72 20 61 20 74 61 62 6c 65  h.  ^For a table
d580: 20 6f 72 20 76 69 65 77 2c 20 74 68 65 0a 74 62   or view, the.tb
d590: 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69 73  l_name column is
d5a0: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6e   a copy of the n
d5b0: 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 46 6f  ame column.  ^Fo
d5c0: 72 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 20  r an index, the 
d5d0: 74 62 6c 5f 6e 61 6d 65 0a 69 73 20 74 68 65 20  tbl_name.is the 
d5e0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
d5f0: 65 20 74 68 61 74 20 69 73 20 69 6e 64 65 78 65  e that is indexe
d600: 64 2e 20 20 5e 46 6f 72 20 61 20 74 72 69 67 67  d.  ^For a trigg
d610: 65 72 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65  er, the tbl_name
d620: 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74  .column stores t
d630: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
d640: 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 68 61  able or view tha
d650: 74 20 63 61 75 73 65 73 20 74 68 65 20 74 72 69  t causes the tri
d660: 67 67 65 72 20 0a 74 6f 20 66 69 72 65 2e 3c 2f  gger .to fire.</
d670: 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c  p>..<p>^(The sql
d680: 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f 74 70  ite_master.rootp
d690: 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65  age column store
d6a0: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
d6b0: 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a 62 2d  r of the root.b-
d6c0: 74 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 61  tree page for ta
d6d0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
d6e0: 2e 29 5e 20 20 5e 46 6f 72 20 72 6f 77 73 20 74  .)^  ^For rows t
d6f0: 68 61 74 20 64 65 66 69 6e 65 20 76 69 65 77 73  hat define views
d700: 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e 64 20  , triggers,.and 
d710: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20  virtual tables, 
d720: 74 68 65 20 72 6f 6f 74 70 61 67 65 20 63 6f 6c  the rootpage col
d730: 75 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55 4c 4c  umn is 0 or NULL
d740: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  .</p>..<p>^(The 
d750: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71  sqlite_master.sq
d760: 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20  l column stores 
d770: 53 51 4c 20 74 65 78 74 20 74 68 61 74 20 64 65  SQL text that de
d780: 73 63 72 69 62 65 73 20 74 68 65 0a 6f 62 6a 65  scribes the.obje
d790: 63 74 2e 20 20 54 68 69 73 20 53 51 4c 20 74 65  ct.  This SQL te
d7a0: 78 74 20 69 73 20 61 20 5b 43 52 45 41 54 45 20  xt is a [CREATE 
d7b0: 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54 45 20  TABLE], [CREATE 
d7c0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 5d 2c 0a  VIRTUAL TABLE],.
d7d0: 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 2c 0a  [CREATE INDEX],.
d7e0: 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2c 20 6f  [CREATE VIEW], o
d7f0: 72 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45  r [CREATE TRIGGE
d800: 52 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  R] statement tha
d810: 74 20 69 66 20 65 76 61 6c 75 61 74 65 64 20 61  t if evaluated a
d820: 67 61 69 6e 73 74 0a 74 68 65 20 64 61 74 61 62  gainst.the datab
d830: 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 69 74  ase file when it
d840: 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
d850: 61 62 61 73 65 20 6f 66 20 61 20 5b 64 61 74 61  abase of a [data
d860: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  base connection]
d870: 0a 77 6f 75 6c 64 20 72 65 63 72 65 61 74 65 64  .would recreated
d880: 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 5e 20 20   the object.)^  
d890: 54 68 65 20 74 65 78 74 20 69 73 20 75 73 75 61  The text is usua
d8a0: 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66 20 74 68  lly a copy of th
d8b0: 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74 65  e original.state
d8c0: 6d 65 6e 74 20 75 73 65 64 20 74 6f 20 63 72 65  ment used to cre
d8d0: 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74 20 62  ate the object b
d8e0: 75 74 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69 7a  ut with normaliz
d8f0: 61 74 69 6f 6e 73 20 61 70 70 6c 69 65 64 20 73  ations applied s
d900: 6f 0a 74 68 61 74 20 74 68 65 20 74 65 78 74 20  o.that the text 
d910: 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65 20  conforms to the 
d920: 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73 3a  following rules:
d930: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20  ..<ul>.<li>^The 
d940: 43 52 45 41 54 45 2c 20 54 41 42 4c 45 2c 20 56  CREATE, TABLE, V
d950: 49 45 57 2c 20 54 52 49 47 47 45 52 2c 20 61 6e  IEW, TRIGGER, an
d960: 64 20 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 73  d INDEX keywords
d970: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
d980: 67 0a 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65  g.of the stateme
d990: 6e 74 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  nt are converted
d9a0: 20 74 6f 20 61 6c 6c 20 75 70 70 65 72 20 63 61   to all upper ca
d9b0: 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69 3e  se letters..<li>
d9c0: 5e 54 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d  ^The TEMP or TEM
d9d0: 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 20 69  PORARY keyword i
d9e0: 73 20 72 65 6d 6f 76 65 64 20 69 66 20 69 74 20  s removed if it 
d9f0: 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65  occurs after the
da00: 20 0a 69 6e 69 74 69 61 6c 20 43 52 45 41 54 45   .initial CREATE
da10: 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e 41   keyword..<li>^A
da20: 6e 79 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  ny database name
da30: 20 71 75 61 6c 69 66 69 65 72 20 74 68 61 74 20   qualifier that 
da40: 6f 63 63 75 72 73 20 70 72 69 6f 72 20 74 6f 20  occurs prior to 
da50: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a  the name of the.
da60: 6f 62 6a 65 63 74 20 62 65 69 6e 67 20 63 72 65  object being cre
da70: 61 74 65 64 20 69 73 20 72 65 6d 6f 76 65 64 2e  ated is removed.
da80: 0a 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73 70  .<li>^Leading sp
da90: 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  aces are removed
daa0: 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63 65  ..<li>^All space
dab0: 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  s following the 
dac0: 66 69 72 73 74 20 74 77 6f 20 6b 65 79 77 6f 72  first two keywor
dad0: 64 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  ds are converted
dae0: 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a 73   into a single.s
daf0: 70 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  pace..</ul>..<p>
db00: 5e 28 54 68 65 20 74 65 78 74 20 69 6e 20 74 68  ^(The text in th
db10: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
db20: 73 71 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20  sql column is a 
db30: 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67  copy of the orig
db40: 69 6e 61 6c 0a 43 52 45 41 54 45 20 73 74 61 74  inal.CREATE stat
db50: 65 6d 65 6e 74 20 74 65 78 74 20 74 68 61 74 20  ement text that 
db60: 63 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65  created the obje
db70: 63 74 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d 61  ct, except norma
db80: 6c 69 7a 65 64 20 61 73 0a 64 65 73 63 72 69 62  lized as.describ
db90: 65 64 20 61 62 6f 76 65 20 61 6e 64 20 61 73 20  ed above and as 
dba0: 6d 6f 64 69 66 69 65 64 20 62 79 20 73 75 62 73  modified by subs
dbb0: 65 71 75 65 6e 74 20 5b 41 4c 54 45 52 20 54 41  equent [ALTER TA
dbc0: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  BLE] statements.
dbd0: 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  )^.^(The sqlite_
dbe0: 6d 61 73 74 65 72 2e 73 71 6c 20 69 73 20 4e 55  master.sql is NU
dbf0: 4c 4c 20 66 6f 72 20 74 68 65 20 5b 69 6e 74 65  LL for the [inte
dc00: 72 6e 61 6c 20 69 6e 64 69 63 65 73 5d 20 74 68  rnal indices] th
dc10: 61 74 20 61 72 65 0a 61 75 74 6f 6d 61 74 69 63  at are.automatic
dc20: 61 6c 6c 79 20 63 72 65 61 74 65 64 20 62 79 20  ally created by 
dc30: 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52 49  [UNIQUE] or [PRI
dc40: 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72  MARY KEY] constr
dc50: 61 69 6e 74 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c  aints.)^</p>...<
dc60: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
dc70: 69 6e 74 73 63 68 65 6d 61 20 7b 69 6e 74 65 72  intschema {inter
dc80: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
dc90: 74 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20  ts} \.{internal 
dca0: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 7d 20 7b  schema object} {
dcb0: 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 7d 20  internal index} 
dcc0: 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 69 63 65  {internal indice
dcd0: 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 74  s} \.{internal t
dce0: 61 62 6c 65 7d 20 7b 69 6e 74 65 72 6e 61 6c 20  able} {internal 
dcf0: 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  tables}</tcl>.<h
dd00: 34 3e 32 2e 36 2e 31 20 49 6e 74 65 72 6e 61 6c  4>2.6.1 Internal
dd10: 20 53 63 68 65 6d 61 20 4f 62 6a 65 63 74 73 3c   Schema Objects<
dd20: 2f 68 34 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 64 64  /h4>..<p>^In add
dd30: 69 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 61 62  ition to the tab
dd40: 6c 65 73 2c 20 69 6e 64 69 63 65 73 2c 20 76 69  les, indices, vi
dd50: 65 77 73 2c 20 61 6e 64 20 74 72 69 67 67 65 72  ews, and trigger
dd60: 73 20 63 72 65 61 74 65 64 20 62 79 0a 74 68 65  s created by.the
dd70: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61 6e 64   application and
dd80: 2f 6f 72 20 74 68 65 20 64 65 76 65 6c 6f 70 65  /or the develope
dd90: 72 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 73  r using CREATE s
dda0: 74 61 74 65 6d 65 6e 74 73 20 53 51 4c 2c 20 74  tatements SQL, t
ddb0: 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he.sqlite_master
ddc0: 20 74 61 62 6c 65 20 6d 61 79 20 63 6f 6e 74 61   table may conta
ddd0: 69 6e 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  in zero or more 
dde0: 65 6e 74 72 69 65 73 20 66 6f 72 20 0a 3c 69 3e  entries for .<i>
ddf0: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
de00: 6f 62 6a 65 63 74 73 3c 2f 69 3e 20 74 68 61 74  objects</i> that
de10: 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79 20   are created by 
de20: 53 51 4c 69 74 65 20 66 6f 72 20 69 74 73 20 0a  SQLite for its .
de30: 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 75 73 65  own internal use
de40: 2e 20 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f 66  .  ^The names of
de50: 20 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61   internal schema
de60: 20 6f 62 6a 65 63 74 73 0a 61 6c 77 61 79 73 20   objects.always 
de70: 62 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69  begin with "sqli
de80: 74 65 5f 22 20 61 6e 64 20 61 6e 79 20 74 61 62  te_" and any tab
de90: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69 65 77 2c  le, index, view,
dea0: 20 6f 72 20 74 72 69 67 67 65 72 0a 77 68 6f 73   or trigger.whos
deb0: 65 20 6e 61 6d 65 20 62 65 67 69 6e 73 20 77 69  e name begins wi
dec0: 74 68 20 22 73 71 6c 69 74 65 5f 22 20 69 73 20  th "sqlite_" is 
ded0: 61 6e 20 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  an internal sche
dee0: 6d 61 20 6f 62 6a 65 63 74 2e 0a 5e 53 51 4c 69  ma object..^SQLi
def0: 74 65 20 70 72 6f 68 69 62 69 74 73 20 61 70 70  te prohibits app
df00: 6c 69 63 61 74 69 6f 6e 73 20 66 72 6f 6d 20 63  lications from c
df10: 72 65 61 74 69 6e 67 20 6f 62 6a 65 63 74 73 20  reating objects 
df20: 77 68 6f 73 65 20 6e 61 6d 65 73 20 62 65 67 69  whose names begi
df30: 6e 0a 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22  n.with "sqlite_"
df40: 2e 20 20 0a 0a 3c 70 3e 49 6e 74 65 72 6e 61 6c  .  ..<p>Internal
df50: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   schema objects 
df60: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 20 6d  used by SQLite m
df70: 61 79 20 69 6e 63 6c 75 64 65 20 74 68 65 20 66  ay include the f
df80: 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 75 6c 3e 0a  ollowing:..<ul>.
df90: 3c 6c 69 3e 3c 70 3e 49 6e 64 69 63 65 73 20 77  <li><p>Indices w
dfa0: 69 74 68 20 6e 61 6d 65 73 20 6f 66 20 74 68 65  ith names of the
dfb0: 20 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f 61 75   form "sqlite_au
dfc0: 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22  toindex_TABLE_N"
dfd0: 20 74 68 61 74 0a 20 20 20 20 20 20 20 61 72 65   that.       are
dfe0: 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
dff0: 6e 74 20 5b 55 4e 49 51 55 45 5d 20 61 6e 64 20  nt [UNIQUE] and 
e000: 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f  [PRIMARY KEY] co
e010: 6e 73 74 72 61 69 6e 74 73 20 6f 6e 0a 20 20 20  nstraints on.   
e020: 20 20 20 20 6f 72 64 69 6e 61 72 79 20 74 61 62      ordinary tab
e030: 6c 65 73 2e 0a 0a 3c 6c 69 3e 3c 70 3e 41 20 74  les...<li><p>A t
e040: 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 6e 61  able with the na
e050: 6d 65 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65  me "sqlite_seque
e060: 6e 63 65 22 20 74 68 61 74 20 69 73 20 75 73 65  nce" that is use
e070: 64 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 0a  d to keep track.
e080: 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 6d 61         of the ma
e090: 78 69 6d 75 6d 20 68 69 73 74 6f 72 69 63 61 6c  ximum historical
e0a0: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
e0b0: 59 20 4b 45 59 5d 20 66 6f 72 20 61 20 74 61 62  Y KEY] for a tab
e0c0: 6c 65 20 74 68 61 74 0a 20 20 20 20 20 20 20 75  le that.       u
e0d0: 73 69 6e 67 20 5b 41 55 54 4f 49 4e 43 52 45 4d  sing [AUTOINCREM
e0e0: 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 61  ENT]...<li><p>Ta
e0f0: 62 6c 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20  bles with names 
e100: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c  of the form "sql
e110: 69 74 65 5f 73 74 61 74 4e 22 20 77 68 65 72 65  ite_statN" where
e120: 20 4e 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   N is an integer
e130: 2e 0a 20 20 20 20 20 20 20 53 75 63 68 20 74 61  ..       Such ta
e140: 62 6c 65 73 20 73 74 6f 72 65 20 64 61 74 61 62  bles store datab
e150: 61 73 65 20 73 74 61 74 69 73 74 69 63 73 20 67  ase statistics g
e160: 61 74 68 65 72 65 64 20 62 79 20 74 68 65 20 5b  athered by the [
e170: 41 4e 41 4c 59 5a 45 5d 0a 20 20 20 20 20 20 20  ANALYZE].       
e180: 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 75 73 65 64  command and used
e190: 20 62 79 20 74 68 65 20 71 75 65 72 79 20 70 6c   by the query pl
e1a0: 61 6e 6e 65 72 20 74 6f 20 68 65 6c 70 20 64 65  anner to help de
e1b0: 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74  termine the best
e1c0: 0a 20 20 20 20 20 20 20 61 6c 67 6f 72 69 74 68  .       algorith
e1d0: 6d 20 74 6f 20 75 73 65 20 66 6f 72 20 65 61 63  m to use for eac
e1e0: 68 20 71 75 65 72 79 2e 0a 3c 2f 75 6c 3e 0a 0a  h query..</ul>..
e1f0: 3c 70 3e 4e 65 77 20 69 6e 74 65 72 6e 61 6c 20  <p>New internal 
e200: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 6e  schema objects n
e210: 61 6d 65 73 2c 20 61 6c 77 61 79 73 20 62 65 67  ames, always beg
e220: 69 6e 6e 69 6e 67 20 77 69 74 68 20 22 73 71 6c  inning with "sql
e230: 69 74 65 5f 22 2c 0a 6d 61 79 20 62 65 20 61 64  ite_",.may be ad
e240: 64 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74  ded to the SQLit
e250: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e  e file format in
e260: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 73   future releases
e270: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
e280: 65 6e 74 20 73 65 71 74 61 62 20 7b 73 71 6c 69  ent seqtab {sqli
e290: 74 65 5f 73 65 71 75 65 6e 63 65 7d 3c 2f 74 63  te_sequence}</tc
e2a0: 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 32 20 54 68 65  l>.<h4>2.6.2 The
e2b0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
e2c0: 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e   table</h4>..<p>
e2d0: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
e2e0: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e  ence table is an
e2f0: 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20   internal table 
e300: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
e310: 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52  lement.[AUTOINCR
e320: 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71  EMENT].  ^The sq
e330: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
e340: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 61  ble is created a
e350: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65  utomatically.whe
e360: 6e 65 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61  never any ordina
e370: 72 79 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e  ry table with an
e380: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69   AUTOINCREMENT i
e390: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
e3a0: 65 79 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  ey is created.  
e3b0: 5e 4f 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74  ^Once created, t
e3c0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e3d0: 63 65 20 74 61 62 6c 65 20 65 78 69 73 74 73 20  ce table exists 
e3e0: 69 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61  in the.sqlite_ma
e3f0: 73 74 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76  ster table forev
e400: 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  er; it cannot be
e410: 20 64 72 6f 70 70 65 64 2e 0a 54 68 65 20 73 63   dropped..The sc
e420: 68 65 6d 61 20 66 6f 72 20 74 68 65 20 73 71 6c  hema for the sql
e430: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
e440: 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  le is:..<blockqu
e450: 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
e460: 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 65   TABLE sqlite_se
e470: 71 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65 71 29  quence(name,seq)
e480: 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
e490: 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65  uote>..<p>^There
e4a0: 20 69 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77   is a single row
e4b0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
e4c0: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 66 6f  equence table fo
e4d0: 72 20 65 61 63 68 20 6f 72 64 69 6e 61 72 79 0a  r each ordinary.
e4e0: 74 61 62 6c 65 20 74 68 61 74 20 75 73 65 73 20  table that uses 
e4f0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20  AUTOINCREMENT.  
e500: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
e510: 74 61 62 6c 65 20 28 61 73 20 69 74 20 61 70 70  table (as it app
e520: 65 61 72 73 20 69 6e 0a 73 71 6c 69 74 65 5f 6d  ears in.sqlite_m
e530: 61 73 74 65 72 2e 6e 61 6d 65 29 20 69 73 20 69  aster.name) is i
e540: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  n the sqlite_seq
e550: 75 65 6e 63 65 2e 6d 61 69 6e 20 66 69 65 6c 64  uence.main field
e560: 20 61 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74   and the largest
e570: 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  .[INTEGER PRIMAR
e580: 59 20 4b 45 59 5d 20 65 76 65 72 20 75 73 65 64  Y KEY] ever used
e590: 20 62 79 20 74 68 61 74 20 74 61 62 6c 65 20 69   by that table i
e5a0: 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
e5b0: 73 65 71 75 65 6e 63 65 2e 73 65 71 0a 66 69 65  sequence.seq.fie
e5c0: 6c 64 2e 20 20 5e 4e 65 77 20 61 75 74 6f 6d 61  ld.  ^New automa
e5d0: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
e5e0: 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  d integer primar
e5f0: 79 20 6b 65 79 73 20 66 6f 72 20 41 55 54 4f 49  y keys for AUTOI
e600: 4e 43 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20  NCREMENT.tables 
e610: 61 72 65 20 67 75 61 72 61 6e 74 65 65 64 20 74  are guaranteed t
e620: 6f 20 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e  o be larger than
e630: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
e640: 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 66  ence.seq field f
e650: 6f 72 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e  or.that table..^
e660: 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73  (If the sqlite_s
e670: 65 71 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c  equence.seq fiel
e680: 64 20 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43 52  d of an AUTOINCR
e690: 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61  EMENT table is a
e6a0: 6c 72 65 61 64 79 20 61 74 0a 74 68 65 20 6c 61  lready at.the la
e6b0: 72 67 65 73 74 20 69 6e 74 65 67 65 72 20 76 61  rgest integer va
e6c0: 6c 75 65 20 28 39 32 32 33 33 37 32 30 33 36 38  lue (92233720368
e6d0: 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 61  54775807) then a
e6e0: 74 74 65 6d 70 74 73 20 74 6f 20 61 64 64 20 6e  ttempts to add n
e6f0: 65 77 0a 72 6f 77 73 20 74 6f 20 74 68 61 74 20  ew.rows to that 
e700: 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 61 75  table with an au
e710: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65  tomatically gene
e720: 72 61 74 65 64 20 69 6e 74 65 67 65 72 20 70 72  rated integer pr
e730: 69 6d 61 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a  imary will fail.
e740: 77 69 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f  with an [SQLITE_
e750: 46 55 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e  FULL] error.)^.^
e760: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
e770: 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 69 73  nce.seq field is
e780: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75   automatically u
e790: 70 64 61 74 65 64 20 69 66 20 72 65 71 75 69 72  pdated if requir
e7a0: 65 64 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72  ed when.new entr
e7b0: 69 65 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  ies are added to
e7c0: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
e7d0: 54 20 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65 20  T table.  .^The 
e7e0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
e7f0: 72 6f 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49  row for an AUTOI
e800: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69  NCREMENT table i
e810: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
e820: 64 65 6c 65 74 65 64 0a 77 68 65 6e 20 74 68 65  deleted.when the
e830: 20 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65   table is droppe
e840: 64 2e 0a 5e 49 66 20 74 68 65 20 73 71 6c 69 74  d..^If the sqlit
e850: 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66  e_sequence row f
e860: 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  or an AUTOINCREM
e870: 45 4e 54 20 74 61 62 6c 65 20 64 6f 65 73 20 6e  ENT table does n
e880: 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 74 68  ot exist when.th
e890: 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  e AUTOINCREMENT 
e8a0: 74 61 62 6c 65 20 69 73 20 75 70 64 61 74 65 64  table is updated
e8b0: 2c 20 74 68 65 6e 20 61 20 6e 65 77 20 73 71 6c  , then a new sql
e8c0: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77  ite_sequence row
e8d0: 20 69 73 20 63 72 65 61 74 65 64 2e 0a 5e 28 49   is created..^(I
e8e0: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  f the sqlite_seq
e8f0: 75 65 6e 63 65 2e 73 65 71 20 76 61 6c 75 65 20  uence.seq value 
e900: 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45  for an AUTOINCRE
e910: 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 6d 61  MENT table is ma
e920: 6e 75 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20 73  nually .set to s
e930: 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65 72 20 74  omething other t
e940: 68 61 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 61  han an integer a
e950: 6e 64 20 74 68 65 72 65 20 69 73 20 61 20 73 75  nd there is a su
e960: 62 73 65 71 75 65 6e 74 20 61 74 74 65 6d 70 74  bsequent attempt
e970: 20 74 6f 0a 69 6e 73 65 72 74 20 74 68 65 20 6f   to.insert the o
e980: 72 20 75 70 64 61 74 65 20 74 68 65 20 41 55 54  r update the AUT
e990: 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
e9a0: 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  , then the behav
e9b0: 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
e9c0: 2e 29 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63 61  .)^..<p>^Applica
e9d0: 74 69 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c 6c  tion code is all
e9e0: 6f 77 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 74  owed to modify t
e9f0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ea00: 63 65 20 74 61 62 6c 65 2c 20 74 6f 20 61 64 64  ce table, to add
ea10: 0a 6e 65 77 20 72 6f 77 73 2c 20 74 6f 20 64 65  .new rows, to de
ea20: 6c 65 74 65 20 72 6f 77 73 2c 20 6f 72 20 74 6f  lete rows, or to
ea30: 20 6d 6f 64 69 66 79 20 65 78 69 73 74 69 6e 67   modify existing
ea40: 20 72 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65 72   rows.  ^However
ea50: 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 6f  , application.co
ea60: 64 65 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65  de cannot create
ea70: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
ea80: 65 6e 63 65 20 74 61 62 6c 65 20 69 66 20 69 74  ence table if it
ea90: 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64   does not alread
eaa0: 79 20 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69 63  y exist..^Applic
eab0: 61 74 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20 64  ation code can d
eac0: 65 6c 65 74 65 20 61 6c 6c 20 65 6e 74 72 69 65  elete all entrie
ead0: 73 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74  s from the sqlit
eae0: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
eaf0: 2c 0a 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f  ,.but applicatio
eb00: 6e 20 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64 72  n code cannot dr
eb10: 6f 70 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  op the sqlite_se
eb20: 71 75 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a 3c  quence table...<
eb30: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
eb40: 73 74 61 74 31 74 61 62 20 7b 73 71 6c 69 74 65  stat1tab {sqlite
eb50: 5f 73 74 61 74 31 7d 20 53 51 4c 49 54 45 5f 53  _stat1} SQLITE_S
eb60: 54 41 54 31 20 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  TAT1 </tcl>.<h4>
eb70: 32 2e 36 2e 33 20 54 68 65 20 73 71 6c 69 74 65  2.6.3 The sqlite
eb80: 5f 73 74 61 74 31 20 74 61 62 6c 65 3c 2f 68 34  _stat1 table</h4
eb90: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74  >..<p>^The sqlit
eba0: 65 5f 73 74 61 74 31 20 69 73 20 61 6e 20 69 6e  e_stat1 is an in
ebb0: 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 63 72 65  ternal table cre
ebc0: 61 74 65 64 20 62 79 20 74 68 65 20 5b 41 4e 41  ated by the [ANA
ebd0: 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e  LYZE] command.an
ebe0: 64 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 73  d used to hold s
ebf0: 75 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f  upplemental info
ec00: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 61  rmation about ta
ec10: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
ec20: 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79 20   that the.query 
ec30: 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20  planner can use 
ec40: 74 6f 20 68 65 6c 70 20 69 74 20 66 69 6e 64 20  to help it find 
ec50: 62 65 74 74 65 72 20 77 61 79 73 20 6f 66 20 70  better ways of p
ec60: 65 72 66 6f 72 6d 69 6e 67 20 71 75 65 72 69 65  erforming querie
ec70: 73 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73  s..^Applications
ec80: 20 63 61 6e 20 75 70 64 61 74 65 2c 20 64 65 6c   can update, del
ec90: 65 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74  ete from, insert
eca0: 20 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74 68   into or drop th
ecb0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 0a 74  e sqlite_stat1.t
ecc0: 61 62 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f  able, but may no
ecd0: 74 20 63 72 65 61 74 65 20 6f 72 20 61 6c 74 65  t create or alte
ece0: 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  r the sqlite_sta
ecf0: 74 31 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73  t1 table..^The s
ed00: 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
ed10: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
ed20: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
ed30: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
ed40: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
ed50: 71 6c 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c  qlite_stat1(tbl,
ed60: 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65  idx,stat);.</pre
ed70: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
ed80: 3c 70 3e 54 68 65 72 65 20 69 73 20 6e 6f 72 6d  <p>There is norm
ed90: 61 6c 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65 72  ally one row per
eda0: 20 69 6e 64 65 78 2c 20 77 69 74 68 20 74 68 65   index, with the
edb0: 20 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65   index identifie
edc0: 64 20 62 79 20 74 68 65 0a 6e 61 6d 65 20 69 6e  d by the.name in
edd0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
ede0: 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 2e 20 20 54  1.idx column.  T
edf0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
ee00: 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a 74 68  tbl column is.th
ee10: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
ee20: 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
ee30: 20 69 6e 64 65 78 20 62 65 6c 6f 6e 67 73 2e 20   index belongs. 
ee40: 20 49 6e 20 65 61 63 68 20 73 75 63 68 20 72 6f   In each such ro
ee50: 77 2c 20 0a 74 68 65 20 73 71 6c 69 74 65 5f 73  w, .the sqlite_s
ee60: 74 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20  tat.stat column 
ee70: 77 69 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e 67  will be.a string
ee80: 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 61   consisting of a
ee90: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72   list of integer
eea0: 73 2e 20 20 54 68 65 20 66 69 72 73 74 20 69 6e  s.  The first in
eeb0: 74 65 67 65 72 20 69 6e 20 74 68 69 73 0a 6c 69  teger in this.li
eec0: 73 74 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  st is the approx
eed0: 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
eee0: 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
eef0: 78 20 61 6e 64 20 69 6e 20 74 68 65 20 74 61 62  x and in the tab
ef00: 6c 65 2e 20 20 0a 54 68 65 20 73 65 63 6f 6e 64  le.  .The second
ef10: 20 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20   integer is the 
ef20: 61 70 70 72 6f 78 69 6d 61 74 65 20 61 76 65 72  approximate aver
ef30: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  age number of ro
ef40: 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a  ws in the index.
ef50: 74 68 61 74 20 68 61 76 65 20 74 68 65 20 73 61  that have the sa
ef60: 6d 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  me value in the 
ef70: 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
ef80: 74 68 65 20 69 6e 64 65 78 2e 20 20 54 68 65 20  the index.  The 
ef90: 74 68 69 72 64 20 0a 69 6e 74 65 67 65 72 20 69  third .integer i
efa0: 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
efb0: 65 20 61 76 65 72 61 67 65 20 6e 75 6d 62 65 72  e average number
efc0: 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
efd0: 69 6e 64 65 78 20 74 68 61 74 20 68 61 76 65 20  index that have 
efe0: 0a 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20  .the same value 
eff0: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 77  for the first tw
f000: 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20 54 68 65 20  o columns.  The 
f010: 4e 2d 74 68 20 69 6e 74 65 67 65 72 20 28 66 6f  N-th integer (fo
f020: 72 20 4e 3e 31 29 20 0a 69 73 20 74 68 65 20 61  r N>1) .is the a
f030: 70 70 72 6f 78 69 6d 61 74 65 20 61 76 65 72 61  pproximate avera
f040: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ge number of row
f050: 73 20 69 6e 20 0a 74 68 65 20 69 6e 64 65 78 20  s in .the index 
f060: 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20 73  which have the s
f070: 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
f080: 65 20 66 69 72 73 74 20 4e 2d 31 20 63 6f 6c 75  e first N-1 colu
f090: 6d 6e 73 2e 20 20 46 6f 72 0a 61 20 4b 2d 63 6f  mns.  For.a K-co
f0a0: 6c 75 6d 6e 20 69 6e 64 65 78 2c 20 74 68 65 72  lumn index, ther
f0b0: 65 20 77 69 6c 6c 20 62 65 20 4b 2b 31 20 69 6e  e will be K+1 in
f0c0: 74 65 67 65 72 73 20 69 6e 20 74 68 65 20 73 74  tegers in the st
f0d0: 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 0a 74  at column.  If.t
f0e0: 68 65 20 69 6e 64 65 78 20 69 73 20 75 6e 69 71  he index is uniq
f0f0: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 61 73  ue, then the las
f100: 74 20 69 6e 74 65 67 65 72 20 77 69 6c 6c 20 62  t integer will b
f110: 65 20 31 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 69  e 1...<p>^The li
f120: 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  st of integers i
f130: 6e 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d  n the stat colum
f140: 6e 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79  n can optionally
f150: 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20   be followed.by 
f160: 74 68 65 20 6b 65 79 77 6f 72 64 20 22 75 6e 6f  the keyword "uno
f170: 72 64 65 72 65 64 22 2e 20 20 5e 54 68 65 20 22  rdered".  ^The "
f180: 75 6e 6f 72 64 65 72 65 64 22 20 6b 65 79 77 6f  unordered" keywo
f190: 72 64 2c 20 69 66 20 69 74 20 69 73 20 70 72 65  rd, if it is pre
f1a0: 73 65 6e 74 2c 0a 6d 75 73 74 20 62 65 20 73 65  sent,.must be se
f1b0: 70 61 72 61 74 65 64 20 66 72 6f 6d 20 74 68 65  parated from the
f1c0: 20 6c 61 73 74 20 69 6e 74 65 67 65 72 20 62 79   last integer by
f1d0: 20 61 20 73 69 6e 67 6c 65 20 73 70 61 63 65 2e   a single space.
f1e0: 20 20 5e 49 66 20 74 68 65 0a 22 75 6e 6f 72 64    ^If the."unord
f1f0: 65 72 65 64 22 20 6b 65 79 77 6f 72 64 20 69 73  ered" keyword is
f200: 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
f210: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
f220: 20 61 73 73 75 6d 65 73 20 74 68 61 74 0a 74 68   assumes that.th
f230: 65 20 69 6e 64 65 78 20 69 73 20 75 6e 6f 72 64  e index is unord
f240: 65 72 65 64 20 61 6e 64 20 77 69 6c 6c 20 6e 6f  ered and will no
f250: 74 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20  t use the index 
f260: 66 6f 72 20 61 20 72 61 6e 67 65 20 71 75 65 72  for a range quer
f270: 79 0a 6f 72 20 66 6f 72 20 73 6f 72 74 69 6e 67  y.or for sorting
f280: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 69 73 74 20  ...<p>^The list 
f290: 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74  of integers in t
f2a0: 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 63  he stat column c
f2b0: 61 6e 20 61 6c 73 6f 20 6f 70 74 69 6f 6e 61 6c  an also optional
f2c0: 6c 79 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a 62  ly be followed.b
f2d0: 79 20 61 20 74 6f 6b 65 6e 20 6f 66 20 74 68 65  y a token of the
f2e0: 20 66 6f 72 6d 20 22 73 7a 3d 4e 4e 4e 22 20 77   form "sz=NNN" w
f2f0: 68 65 72 65 20 4e 4e 4e 20 69 73 20 61 6e 20 75  here NNN is an u
f300: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e  nsigned integer.
f310: 20 20 54 68 65 0a 22 73 7a 3d 4e 4e 4e 22 20 74    The."sz=NNN" t
f320: 6f 6b 65 6e 2c 20 69 66 20 70 72 65 73 65 6e 74  oken, if present
f330: 2c 20 6d 75 73 74 20 62 65 20 73 65 70 61 72 61  , must be separa
f340: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6c 61 73  ted from the las
f350: 74 20 69 6e 74 65 67 65 72 20 62 79 20 61 0a 73  t integer by a.s
f360: 69 6e 67 6c 65 20 73 70 61 63 65 2e 20 20 5e 54  ingle space.  ^T
f370: 68 65 20 22 73 7a 3d 4e 4e 4e 22 20 74 6f 6b 65  he "sz=NNN" toke
f380: 6e 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  n means that the
f390: 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
f3a0: 65 20 6f 76 65 72 20 61 6c 6c 20 0a 72 65 63 6f  e over all .reco
f3b0: 72 64 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  rds of the table
f3c0: 20 6f 72 0a 69 6e 64 65 78 20 69 73 20 4e 4e 4e   or.index is NNN
f3d0: 20 62 79 74 65 73 20 70 65 72 20 72 6f 77 2e 20   bytes per row. 
f3e0: 20 5e 54 68 65 20 53 51 4c 69 74 65 20 71 75 65   ^The SQLite que
f3f0: 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69 67 68 74  ry planner might
f400: 20 75 73 65 20 74 68 65 0a 65 73 74 69 6d 61 74   use the.estimat
f410: 65 64 20 72 6f 77 20 73 69 7a 65 20 69 6e 66 6f  ed row size info
f420: 72 6d 61 74 69 6f 6e 20 70 72 6f 76 69 64 65 64  rmation provided
f430: 20 62 79 20 74 68 65 20 22 73 7a 3d 4e 4e 4e 22   by the "sz=NNN"
f440: 20 74 6f 6b 65 6e 0a 74 6f 20 68 65 6c 70 20 69   token.to help i
f450: 74 20 63 68 6f 6f 73 65 20 73 6d 61 6c 6c 65 72  t choose smaller
f460: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
f470: 63 65 73 20 74 68 61 74 20 72 65 71 75 69 72 65  ces that require
f480: 20 6c 65 73 73 20 64 69 73 6b 20 49 2f 4f 2e 0a   less disk I/O..
f490: 0a 3c 70 3e 49 66 20 74 68 65 20 73 71 6c 69 74  .<p>If the sqlit
f4a0: 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75  e_stat1.idx colu
f4b0: 6d 6e 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  mn is NULL, then
f4c0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
f4d0: 31 2e 73 74 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f  1.stat.column co
f4e0: 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20  ntains a single 
f4f0: 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
f500: 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
f510: 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20   number of.rows 
f520: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 64 65  in the table ide
f530: 6e 74 69 66 69 65 64 20 62 79 20 73 71 6c 69 74  ntified by sqlit
f540: 65 5f 73 74 61 74 31 2e 74 62 6c 2e 0a 0a 3c 74  e_stat1.tbl...<t
f550: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
f560: 74 61 74 32 74 61 62 20 7b 73 71 6c 69 74 65 5f  tat2tab {sqlite_
f570: 73 74 61 74 32 7d 3c 2f 74 63 6c 3e 0a 3c 68 34  stat2}</tcl>.<h4
f580: 3e 32 2e 36 2e 34 20 54 68 65 20 73 71 6c 69 74  >2.6.4 The sqlit
f590: 65 5f 73 74 61 74 32 20 74 61 62 6c 65 3c 2f 68  e_stat2 table</h
f5a0: 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  4>..<p>The sqlit
f5b0: 65 5f 73 74 61 74 32 20 69 73 20 6f 6e 6c 79 20  e_stat2 is only 
f5c0: 63 72 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f  created and is o
f5d0: 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c 69  nly used if SQLi
f5e0: 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77  te is compiled.w
f5f0: 69 74 68 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ith SQLITE_ENABL
f600: 45 5f 53 54 41 54 32 20 61 6e 64 20 69 66 20 74  E_STAT2 and if t
f610: 68 65 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  he SQLite versio
f620: 6e 20 6e 75 6d 62 65 72 20 69 73 20 62 65 74 77  n number is betw
f630: 65 65 6e 0a 33 2e 36 2e 31 38 20 61 6e 64 20 33  een.3.6.18 and 3
f640: 2e 37 2e 38 2e 20 20 54 68 65 20 73 71 6c 69 74  .7.8.  The sqlit
f650: 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69 73  e_stat2 table is
f660: 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f   neither read no
f670: 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79  r written by any
f680: 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69  .version of SQLi
f690: 74 65 20 62 65 66 6f 72 65 20 33 2e 36 2e 31 38  te before 3.6.18
f6a0: 20 6e 6f 72 20 61 66 74 65 72 20 33 2e 37 2e 38   nor after 3.7.8
f6b0: 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ..The sqlite_sta
f6c0: 74 32 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e  t2 table contain
f6d0: 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  s additional inf
f6e0: 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74  ormation.about t
f6f0: 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20  he distribution 
f700: 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61  of keys within a
f710: 6e 20 69 6e 64 65 78 2e 0a 54 68 65 20 73 63 68  n index..The sch
f720: 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ema of the sqlit
f730: 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69 73  e_stat2 table is
f740: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62   as follows:..<b
f750: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
f760: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
f770: 69 74 65 5f 73 74 61 74 32 28 74 62 6c 2c 69 64  ite_stat2(tbl,id
f780: 78 2c 73 61 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c  x,sampleno,sampl
f790: 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  e);.</pre></bloc
f7a0: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
f7b0: 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 69 64 78  sqlite_stat2.idx
f7c0: 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20   column and the 
f7d0: 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 74 62 6c  sqlite_stat2.tbl
f7e0: 20 63 6f 6c 75 6d 6e 20 69 6e 20 65 61 63 68 20   column in each 
f7f0: 0a 72 6f 77 20 6f 66 20 74 68 65 20 73 71 6c 69  .row of the sqli
f800: 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69  te_stat2 table i
f810: 64 65 6e 74 69 66 79 20 61 6e 20 69 6e 64 65 78  dentify an index
f820: 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68   described by th
f830: 61 74 20 72 6f 77 2e 0a 54 68 65 72 65 20 61 72  at row..There ar
f840: 65 20 75 73 75 61 6c 6c 79 20 31 30 20 72 6f 77  e usually 10 row
f850: 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
f860: 73 74 61 74 32 0a 74 61 62 6c 65 20 66 6f 72 20  stat2.table for 
f870: 65 61 63 68 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e  each index...<p>
f880: 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  The sqlite_stat2
f890: 20 65 6e 74 72 69 65 73 20 66 6f 72 20 61 6e 20   entries for an 
f8a0: 69 6e 64 65 78 20 74 68 61 74 20 68 61 76 65 20  index that have 
f8b0: 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 73 61 6d  sqlite_stat2.sam
f8c0: 70 6c 65 6e 6f 0a 62 65 74 77 65 65 6e 20 30 20  pleno.between 0 
f8d0: 61 6e 64 20 39 20 69 6e 63 6c 75 73 69 76 65 20  and 9 inclusive 
f8e0: 61 72 65 20 73 61 6d 70 6c 65 73 20 6f 66 20 74  are samples of t
f8f0: 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79  he left-most key
f900: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 0a 69 6e   value in the.in
f910: 64 65 78 20 74 61 6b 65 6e 20 61 74 20 65 76 65  dex taken at eve
f920: 6e 6c 79 20 73 70 61 63 65 64 20 70 6f 69 6e 74  nly spaced point
f930: 73 20 61 6c 6f 6e 67 20 74 68 65 20 69 6e 64 65  s along the inde
f940: 78 2e 0a 4c 65 74 20 43 20 62 65 20 74 68 65 20  x..Let C be the 
f950: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
f960: 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 54 68 65  n the index..The
f970: 6e 20 74 68 65 20 73 61 6d 70 6c 65 64 20 72 6f  n the sampled ro
f980: 77 73 20 61 72 65 20 67 69 76 65 6e 20 62 79 0a  ws are given by.
f990: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20  .<blockquote>.  
f9a0: 20 20 20 72 6f 77 6e 75 6d 62 65 72 20 3d 20 28     rownumber = (
f9b0: 69 2a 43 2a 32 20 2b 20 43 29 2f 32 30 0a 3c 2f  i*C*2 + C)/20.</
f9c0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
f9d0: 54 68 65 20 76 61 72 69 61 62 6c 65 20 69 20 69  The variable i i
f9e0: 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 65  n the previous e
f9f0: 78 70 72 65 73 73 69 6f 6e 20 76 61 72 69 65 73  xpression varies
fa00: 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 39   between 0 and 9
fa10: 2e 0a 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  ..Conceptually, 
fa20: 74 68 65 20 69 6e 64 65 78 20 73 70 61 63 65 20  the index space 
fa30: 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 0a  is divided into.
fa40: 31 30 20 75 6e 69 66 6f 72 6d 20 62 75 63 6b 65  10 uniform bucke
fa50: 74 73 20 61 6e 64 20 74 68 65 20 73 61 6d 70 6c  ts and the sampl
fa60: 65 73 20 61 72 65 20 74 68 65 20 6d 69 64 64 6c  es are the middl
fa70: 65 20 72 6f 77 20 66 72 6f 6d 20 65 61 63 68 20  e row from each 
fa80: 62 75 63 6b 65 74 2e 0a 0a 3c 70 3e 54 68 65 20  bucket...<p>The 
fa90: 66 6f 72 6d 61 74 20 66 6f 72 20 73 71 6c 69 74  format for sqlit
faa0: 65 5f 73 74 61 74 32 20 69 73 20 72 65 63 6f 72  e_stat2 is recor
fab0: 64 65 64 20 68 65 72 65 20 66 6f 72 20 6c 65 67  ded here for leg
fac0: 61 63 79 20 72 65 66 65 72 65 6e 63 65 2e 20 20  acy reference.  
fad0: 0a 52 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73  .Recent versions
fae0: 20 6f 66 20 53 51 4c 69 74 65 20 6e 6f 20 6c 6f   of SQLite no lo
faf0: 6e 67 65 72 20 73 75 70 70 6f 72 74 20 73 71 6c  nger support sql
fb00: 69 74 65 5f 73 74 61 74 32 20 61 6e 64 20 74 68  ite_stat2 and th
fb10: 65 0a 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e.sqlite_stat2 t
fb20: 61 62 6c 65 2c 20 69 74 20 69 73 20 65 78 69 73  able, it is exis
fb30: 74 73 2c 20 69 73 20 73 69 6d 70 6c 79 20 69 67  ts, is simply ig
fb40: 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  nored...<tcl>hd_
fb50: 66 72 61 67 6d 65 6e 74 20 73 74 61 74 33 74 61  fragment stat3ta
fb60: 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 33 7d  b {sqlite_stat3}
fb70: 20 53 51 4c 49 54 45 5f 53 54 41 54 33 3c 2f 74   SQLITE_STAT3</t
fb80: 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 35 20 54 68  cl>.<h4>2.6.5 Th
fb90: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
fba0: 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68  able</h4>..<p>Th
fbb0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 69  e sqlite_stat3 i
fbc0: 73 20 6f 6e 6c 79 20 6f 6e 6c 79 20 75 73 65 64  s only only used
fbd0: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f   if SQLite is co
fbe0: 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c  mpiled.with [SQL
fbf0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
fc00: 5d 20 6f 72 20 5b 53 51 4c 49 54 45 5f 45 4e 41  ] or [SQLITE_ENA
fc10: 42 4c 45 5f 53 54 41 54 34 5d 0a 61 6e 64 20 69  BLE_STAT4].and i
fc20: 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72  f the SQLite ver
fc30: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 33  sion number is 3
fc40: 2e 37 2e 39 20 6f 72 20 67 72 65 61 74 65 72 2e  .7.9 or greater.
fc50: 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
fc60: 33 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68  3 table is neith
fc70: 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74  er read nor writ
fc80: 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69  ten by any.versi
fc90: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66  on of SQLite bef
fca0: 6f 72 65 20 33 2e 37 2e 39 2e 0a 49 66 20 74 68  ore 3.7.9..If th
fcb0: 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
fcc0: 5f 53 54 41 54 34 5d 20 63 6f 6d 70 69 6c 65 2d  _STAT4] compile-
fcd0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
fce0: 73 65 64 20 61 6e 64 20 74 68 65 0a 53 51 4c 69  sed and the.SQLi
fcf0: 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  te version numbe
fd00: 72 20 69 73 20 33 2e 38 2e 31 20 6f 72 20 67 72  r is 3.8.1 or gr
fd10: 65 61 74 65 72 2c 20 74 68 65 6e 20 73 71 6c 69  eater, then sqli
fd20: 74 65 5f 73 74 61 74 33 20 6d 69 67 68 74 0a 62  te_stat3 might.b
fd30: 65 20 72 65 61 64 20 62 75 74 20 6e 6f 74 20 77  e read but not w
fd40: 72 69 74 74 65 6e 2e 0a 54 68 65 20 73 71 6c 69  ritten..The sqli
fd50: 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 63  te_stat3 table c
fd60: 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e  ontains addition
fd70: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61  al information.a
fd80: 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62  bout the distrib
fd90: 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69  ution of keys wi
fda0: 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2c 20 69  thin an index, i
fdb0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
fdc0: 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65  the.query planne
fdd0: 72 20 63 61 6e 20 75 73 65 20 74 6f 20 64 65 76  r can use to dev
fde0: 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20 66  ise better and f
fdf0: 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f  aster query algo
fe00: 72 69 74 68 6d 73 2e 0a 54 68 65 20 73 63 68 65  rithms..The sche
fe10: 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ma of the sqlite
fe20: 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
fe30: 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c  as follows:..<bl
fe40: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
fe50: 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
fe60: 74 65 5f 73 74 61 74 33 28 74 62 6c 2c 69 64 78  te_stat3(tbl,idx
fe70: 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61  ,nEq,nLt,nDLt,sa
fe80: 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  mple);.</pre></b
fe90: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
fea0: 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79  here are usually
feb0: 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
fec0: 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
fed0: 73 74 61 74 33 20 74 61 62 6c 65 20 66 6f 72 20  stat3 table for 
fee0: 65 61 63 68 20 69 6e 64 65 78 2e 0a 54 68 65 20  each index..The 
fef0: 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 73 61 6d  sqlite_stat3.sam
ff00: 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  ple column holds
ff10: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
ff20: 65 20 6c 65 66 74 2d 6d 6f 73 74 20 66 69 65 6c  e left-most fiel
ff30: 64 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20 69 64  d of an.index id
ff40: 65 6e 74 69 66 69 65 64 20 62 79 20 73 71 6c 69  entified by sqli
ff50: 74 65 5f 73 74 61 74 33 2e 69 64 78 20 61 6e 64  te_stat3.idx and
ff60: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 74 62   sqlite_stat3.tb
ff70: 6c 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  l..The sqlite_st
ff80: 61 74 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68  at3.nEq column h
ff90: 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69  olds the approxi
ffa0: 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65  mate.number of e
ffb0: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
ffc0: 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d  dex whose left-m
ffd0: 6f 73 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74  ost column exact
ffe0: 6c 79 20 6d 61 74 63 68 65 73 0a 74 68 65 20 73  ly matches.the s
fff0: 61 6d 70 6c 65 2e 20 20 0a 54 68 65 20 73 71 6c  ample.  .The sql
10000 69 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f  ite_stat3.nLt ho
10010 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d  lds the approxim
10020 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  ate number of en
10030 74 72 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64  tries in the.ind
10040 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f  ex whose left-mo
10050 73 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73  st column is les
10060 73 20 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c  s than the sampl
10070 65 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  e..The sqlite_st
10080 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20  at3.nDLt column 
10090 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78  holds the approx
100a0 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20  imate.number of 
100b0 64 69 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f  distinct left-mo
100c0 73 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  st entries in th
100d0 65 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  e index that are
100e0 20 6c 65 73 73 20 74 68 61 6e 0a 74 68 65 20 73   less than.the s
100f0 61 6d 70 6c 65 2e 0a 0a 3c 70 3e 54 68 65 72 65  ample...<p>There
10100 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74   can be an arbit
10110 72 61 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73  rary number of s
10120 71 6c 69 74 65 5f 73 74 61 74 33 20 65 6e 74 72  qlite_stat3 entr
10130 69 65 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54  ies per index..T
10140 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d  he [ANALYZE] com
10150 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61  mand will typica
10160 6c 6c 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c  lly generate sql
10170 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 73  ite_stat3 tables
10180 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65  .that contain be
10190 74 77 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20  tween 10 and 40 
101a0 73 61 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65  samples that are
101b0 20 64 69 73 74 72 69 62 75 74 65 64 20 61 63 72   distributed acr
101c0 6f 73 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63  oss.the key spac
101d0 65 20 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65  e and with large
101e0 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 74   nEq values...<t
101f0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
10200 74 61 74 34 74 61 62 20 7b 73 71 6c 69 74 65 5f  tat4tab {sqlite_
10210 73 74 61 74 34 7d 20 53 51 4c 49 54 45 5f 53 54  stat4} SQLITE_ST
10220 41 54 34 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e  AT4</tcl>.<h4>2.
10230 36 2e 36 20 54 68 65 20 73 71 6c 69 74 65 5f 73  6.6 The sqlite_s
10240 74 61 74 34 20 74 61 62 6c 65 3c 2f 68 34 3e 0a  tat4 table</h4>.
10250 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
10260 74 61 74 34 20 69 73 20 6f 6e 6c 79 20 63 72 65  tat4 is only cre
10270 61 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79  ated and is only
10280 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20   used if SQLite 
10290 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68  is compiled.with
102a0 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f   [SQLITE_ENABLE_
102b0 53 54 41 54 34 5d 20 61 6e 64 20 69 66 20 74 68  STAT4] and if th
102c0 65 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  e SQLite version
102d0 20 6e 75 6d 62 65 72 20 69 73 0a 33 2e 38 2e 31   number is.3.8.1
102e0 20 6f 72 20 67 72 65 61 74 65 72 2e 20 20 54 68   or greater.  Th
102f0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
10300 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20  able is neither 
10310 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e  read nor written
10320 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20   by any.version 
10330 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65  of SQLite before
10340 20 33 2e 38 2e 31 2e 0a 54 68 65 20 73 71 6c 69   3.8.1..The sqli
10350 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 63  te_stat4 table c
10360 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e  ontains addition
10370 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61  al information.a
10380 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62  bout the distrib
10390 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69  ution of keys wi
103a0 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2c 20 69  thin an index, i
103b0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
103c0 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65  the.query planne
103d0 72 20 63 61 6e 20 75 73 65 20 74 6f 20 64 65 76  r can use to dev
103e0 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20 66  ise better and f
103f0 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f  aster query algo
10400 72 69 74 68 6d 73 2e 0a 54 68 65 20 73 63 68 65  rithms..The sche
10410 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ma of the sqlite
10420 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69 73 20  _stat4 table is 
10430 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c  as follows:..<bl
10440 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
10450 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
10460 74 65 5f 73 74 61 74 34 28 74 62 6c 2c 69 64 78  te_stat4(tbl,idx
10470 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61  ,nEq,nLt,nDLt,sa
10480 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  mple);.</pre></b
10490 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
104a0 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79  here are usually
104b0 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
104c0 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
104d0 73 74 61 74 34 20 74 61 62 6c 65 20 66 6f 72 20  stat4 table for 
104e0 65 61 63 68 20 69 6e 64 65 78 2e 0a 54 68 65 20  each index..The 
104f0 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d  sqlite_stat4.sam
10500 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  ple column holds
10510 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
10520 61 6e 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  an index entry i
10530 6e 0a 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f  n.the [record fo
10540 72 6d 61 74 5d 2e 20 20 54 68 65 20 69 6e 64 65  rmat].  The inde
10550 78 20 65 6e 74 72 79 20 73 74 6f 72 65 64 20 69  x entry stored i
10560 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
10570 0a 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65  .index identifie
10580 64 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74  d by sqlite_stat
10590 34 2e 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65  4.idx and sqlite
105a0 5f 73 74 61 74 34 2e 74 62 6c 2e 0a 54 68 65 20  _stat4.tbl..The 
105b0 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 45 71  sqlite_stat4.nEq
105c0 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20   column holds a 
105d0 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73  list of integers
105e0 20 77 68 65 72 65 20 74 68 65 20 4b 2d 74 68 20   where the K-th 
105f0 69 6e 74 65 67 65 72 0a 69 73 20 74 68 65 20 61  integer.is the a
10600 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65  pproximate numbe
10610 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
10620 74 68 65 20 69 6e 64 65 78 20 77 68 6f 73 65 20  the index whose 
10630 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75  left-most K colu
10640 6d 6e 73 0a 65 78 61 63 74 6c 79 20 6d 61 74 63  mns.exactly matc
10650 68 20 74 68 65 20 4b 20 6c 65 66 74 2d 6d 6f 73  h the K left-mos
10660 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  t columns of the
10670 20 73 61 6d 70 6c 65 2e 0a 54 68 65 20 73 71 6c   sample..The sql
10680 69 74 65 5f 73 74 61 74 34 2e 6e 4c 74 20 68 6f  ite_stat4.nLt ho
10690 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20 69 6e  lds a list of in
106a0 74 65 67 65 72 73 20 77 68 65 72 65 20 74 68 65  tegers where the
106b0 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73   K-th integer is
106c0 0a 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65  .the approximate
106d0 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
106e0 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20  es in the.index 
106f0 77 68 6f 73 65 20 4b 20 6c 65 66 74 2d 6d 6f 73  whose K left-mos
10700 74 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f  t columns are co
10710 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73 20  llectively less 
10720 74 68 61 6e 20 74 68 65 20 0a 4b 20 6c 65 66 74  than the .K left
10730 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 6f 66  -most columns of
10740 20 74 68 65 20 73 61 6d 70 6c 65 2e 0a 54 68 65   the sample..The
10750 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 44   sqlite_stat4.nD
10760 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  Lt column holds 
10770 61 20 6c 69 73 74 20 6f 66 20 69 6e 74 67 65 72  a list of intger
10780 73 20 77 68 65 72 65 20 74 68 65 20 4b 2d 74 68  s where the K-th
10790 20 0a 69 6e 74 65 67 65 72 73 20 69 73 20 74 68   .integers is th
107a0 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75  e approximate.nu
107b0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
107c0 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68 61  in the index tha
107d0 74 20 61 72 65 20 64 69 73 74 69 6e 63 74 20 69  t are distinct i
107e0 6e 20 74 68 65 20 66 69 72 73 74 20 4b 20 63 6f  n the first K co
107f0 6c 75 6d 6e 73 20 61 6e 64 0a 74 68 61 74 20 61  lumns and.that a
10800 72 65 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f  re whose left-mo
10810 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65  st K columns are
10820 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65   collectively le
10830 73 73 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  ss than the left
10840 2d 6d 6f 73 74 0a 4b 20 63 6f 6c 75 6d 6e 73 20  -most.K columns 
10850 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 0a 0a  of the sample...
10860 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
10870 61 74 34 20 69 73 20 61 20 67 65 6e 65 72 61 6c  at4 is a general
10880 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ization of the s
10890 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
108a0 65 2e 20 20 54 68 65 0a 73 71 6c 69 74 65 5f 73  e.  The.sqlite_s
108b0 74 61 74 33 20 74 61 62 6c 65 20 70 72 6f 76 69  tat3 table provi
108c0 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  des information 
108d0 61 62 6f 75 74 20 74 68 65 20 6c 65 66 74 2d 6d  about the left-m
108e0 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ost column of an
108f0 0a 69 6e 64 65 78 20 77 68 65 72 65 61 73 20 74  .index whereas t
10900 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
10910 74 61 62 6c 65 20 70 72 6f 76 69 64 65 73 20 69  table provides i
10920 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
10930 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20   all columns.of 
10940 74 68 65 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54  the index...<p>T
10950 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61  here can be an a
10960 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20  rbitrary number 
10970 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  of sqlite_stat4 
10980 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e 64 65  entries per inde
10990 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  x..The [ANALYZE]
109a0 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79   command will ty
109b0 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  pically generate
109c0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
109d0 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69  bles.that contai
109e0 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64  n between 10 and
109f0 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74   40 samples that
10a00 20 61 72 65 20 64 69 73 74 72 69 62 75 74 65 64   are distributed
10a10 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20   across.the key 
10a20 73 70 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c  space and with l
10a30 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e  arge nEq values.
10a40 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
10a50 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e  nt rollbackjourn
10a60 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  al {rollback jou
10a70 72 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63  rnal format}</tc
10a80 6c 3e 0a 3c 68 32 3e 33 2e 30 20 54 68 65 20 52  l>.<h2>3.0 The R
10a90 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c  ollback Journal<
10aa0 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c  /h2>..<p>The rol
10ab0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73  lback journal is
10ac0 20 61 20 66 69 6c 65 20 61 73 73 6f 63 69 61 74   a file associat
10ad0 65 64 20 77 69 74 68 20 65 61 63 68 20 53 51 4c  ed with each SQL
10ae0 69 74 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  ite database.fil
10af0 65 20 74 68 61 74 20 68 6f 6c 64 20 69 6e 66 6f  e that hold info
10b00 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 74 6f 20  rmation used to 
10b10 72 65 73 74 6f 72 65 20 74 68 65 20 64 61 74 61  restore the data
10b20 62 61 73 65 20 66 69 6c 65 20 74 6f 20 69 74 73  base file to its
10b30 20 69 6e 69 74 69 61 6c 0a 73 74 61 74 65 20 64   initial.state d
10b40 75 72 69 6e 67 20 74 68 65 20 63 6f 75 72 73 65  uring the course
10b50 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   of a transactio
10b60 6e 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b  n..^The rollback
10b70 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69 73   journal file is
10b80 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20   always located 
10b90 69 6e 20 74 68 65 20 73 61 6d 65 20 0a 64 69 72  in the same .dir
10ba0 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
10bb0 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20  tabase.file and 
10bc0 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
10bd0 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  e as the databas
10be0 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20  e file but with 
10bf0 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e  the string."<tt>
10c00 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61  -journal</tt>" a
10c10 70 70 65 6e 64 65 64 2e 20 20 54 68 65 72 65 20  ppended.  There 
10c20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73 69  can only be a si
10c30 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  ngle rollback jo
10c40 75 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65 64  urnal.associated
10c50 20 77 69 74 68 20 61 20 67 69 76 65 20 64 61 74   with a give dat
10c60 61 62 61 73 65 20 61 6e 64 20 68 65 6e 63 65 20  abase and hence 
10c70 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
10c80 65 20 6f 6e 65 20 77 72 69 74 65 0a 74 72 61 6e  e one write.tran
10c90 73 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61  saction open aga
10ca0 69 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 64 61  inst a single da
10cb0 74 61 62 61 73 65 20 61 74 20 6f 6e 65 20 74 69  tabase at one ti
10cc0 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61  me.</p>..<p>If a
10cd0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
10ce0 61 62 6f 72 74 65 64 20 64 75 65 20 74 6f 20 61  aborted due to a
10cf0 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 72  n application cr
10d00 61 73 68 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e  ash, an operatin
10d10 67 0a 73 79 73 74 65 6d 20 63 72 61 73 68 2c 20  g.system crash, 
10d20 6f 72 20 61 20 68 61 72 64 77 61 72 65 20 70 6f  or a hardware po
10d30 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63  wer failure or c
10d40 72 61 73 68 2c 20 74 68 65 6e 20 74 68 65 20 64  rash, then the d
10d50 61 74 61 62 61 73 65 20 6d 61 79 0a 62 65 20 6c  atabase may.be l
10d60 65 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73  eft in an incons
10d70 69 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20 5e  istent state.  ^
10d80 54 68 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51  The next time SQ
10d90 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f  Lite attempts to
10da0 20 6f 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61   open.the databa
10db0 73 65 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65  se file, the pre
10dc0 73 65 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c  sence of the rol
10dd0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
10de0 6c 65 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65  le will be .dete
10df0 63 74 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75  cted and the jou
10e00 72 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74  rnal will be aut
10e10 6f 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65  omatically playe
10e20 64 20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72  d back to restor
10e30 65 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74  e the.database t
10e40 6f 20 69 74 73 20 73 74 61 74 65 20 61 74 20 74  o its state at t
10e50 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
10e60 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73  incomplete trans
10e70 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  action.</p>..<p>
10e80 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  ^A rollback jour
10e90 6e 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73  nal is only cons
10ea0 69 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c  idered to be val
10eb0 69 64 20 69 66 20 69 74 20 65 78 69 73 74 73 20  id if it exists 
10ec0 61 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76  and.contains a v
10ed0 61 6c 69 64 20 68 65 61 64 65 72 2e 20 20 48 65  alid header.  He
10ee0 6e 63 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f  nce a transactio
10ef0 6e 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74  n can be committ
10f00 65 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72  ed in one.of thr
10f10 65 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c  ee ways:.<ol>.<l
10f20 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b  i>^(The rollback
10f30 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61   journal file ca
10f40 6e 20 62 65 20 64 65 6c 65 74 65 64 29 5e 2c 0a  n be deleted)^,.
10f50 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61  <li>^(The rollba
10f60 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  ck journal file 
10f70 63 61 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64  can be truncated
10f80 20 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 29   to zero length)
10f90 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65 20  ^, or.<li>^(The 
10fa0 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 6f  header of the ro
10fb0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63  llback journal c
10fc0 61 6e 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  an be overwritte
10fd0 6e 20 77 69 74 68 0a 69 6e 76 61 6c 69 64 20 68  n with.invalid h
10fe0 65 61 64 65 72 20 74 65 78 74 20 28 66 6f 72 20  eader text (for 
10ff0 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72  example, all zer
11000 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 5e 54 68  os).)^.</ol>.^Th
11010 65 73 65 20 74 68 72 65 65 20 77 61 79 73 20 6f  ese three ways o
11020 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74  f committing a t
11030 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65  ransaction corre
11040 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c  spond to the DEL
11050 45 54 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61  ETE,.TRUNCATE, a
11060 6e 64 20 50 45 52 53 49 53 54 20 73 65 74 74 69  nd PERSIST setti
11070 6e 67 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ngs, respectivel
11080 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e  y, of the [journ
11090 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e  al_mode pragma].
110a0 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c  .</p>...<p>A val
110b0 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  id rollback jour
110c0 6e 61 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20  nal begins with 
110d0 61 20 68 65 61 64 65 72 20 69 6e 20 74 68 65 20  a header in the 
110e0 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74  following format
110f0 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
11100 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72  <i>Rollback Jour
11110 6e 61 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61  nal Header Forma
11120 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
11130 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
11140 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
11150 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
11160 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
11170 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >^(<td valign=to
11180 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
11190 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
111a0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
111b0 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65 61 64 65  >8.    <td>Heade
111c0 72 20 73 74 72 69 6e 67 3a 20 20 30 78 64 39 2c  r string:  0xd9,
111d0 20 30 78 64 35 2c 20 30 78 30 35 2c 20 30 78 66   0xd5, 0x05, 0xf
111e0 39 2c 20 30 78 32 30 2c 20 30 78 61 31 2c 20 30  9, 0x20, 0xa1, 0
111f0 78 36 33 2c 20 30 78 64 37 29 5e 0a 3c 74 72 3e  x63, 0xd7)^.<tr>
11200 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  ^(<td valign=top
11210 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a   align=center>8.
11220 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
11230 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
11240 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 22 50  4.    <td>The "P
11250 61 67 65 20 43 6f 75 6e 74 22 20 2d 20 54 68 65  age Count" - The
11260 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
11270 20 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 67   in the next seg
11280 6d 65 6e 74 20 6f 66 20 74 68 65 20 0a 20 20 20  ment of the .   
11290 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72       journal, or
112a0 20 2d 31 20 74 6f 0a 20 20 20 20 20 20 20 20 6d   -1 to.        m
112b0 65 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20  ean all content 
112c0 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
112d0 65 20 66 69 6c 65 29 5e 0a 3c 74 72 3e 5e 28 3c  e file)^.<tr>^(<
112e0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
112f0 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 0a 20 20  ign=center>12.  
11300 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
11310 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
11320 20 20 20 20 3c 74 64 3e 41 20 72 61 6e 64 6f 6d      <td>A random
11330 20 6e 6f 6e 63 65 20 66 6f 72 20 74 68 65 20 63   nonce for the c
11340 68 65 63 6b 73 75 6d 29 5e 0a 3c 74 72 3e 5e 28  hecksum)^.<tr>^(
11350 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11360 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 0a 20  lign=center>16. 
11370 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
11380 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
11390 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74 69 61 6c  .    <td>Initial
113a0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
113b0 61 62 61 73 65 20 69 6e 20 70 61 67 65 73 29 5e  abase in pages)^
113c0 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67  .<tr>^(<td valig
113d0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
113e0 65 72 3e 32 30 0a 20 20 20 20 3c 74 64 20 76 61  er>20.    <td va
113f0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
11400 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
11410 53 69 7a 65 20 6f 66 20 61 20 64 69 73 6b 20 73  Size of a disk s
11420 65 63 74 6f 72 20 61 73 73 75 6d 65 64 20 62 79  ector assumed by
11430 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 68 61   the process tha
11440 74 20 77 72 6f 74 65 20 74 68 69 73 0a 20 20 20  t wrote this.   
11450 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e 29 5e 0a       journal.)^.
11460 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e  <tr>^(<td valign
11470 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11480 72 3e 32 34 0a 20 20 20 20 3c 74 64 20 76 61 6c  r>24.    <td val
11490 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
114a0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53  nter>4.    <td>S
114b0 69 7a 65 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ize of pages in 
114c0 74 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 29 5e 0a  this journal.)^.
114d0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
114e0 72 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61  r>..<p>^A rollba
114f0 63 6b 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  ck journal heade
11500 72 20 69 73 20 70 61 64 64 65 64 20 77 69 74 68  r is padded with
11510 20 7a 65 72 6f 73 20 6f 75 74 20 74 6f 20 74 68   zeros out to th
11520 65 20 73 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e  e size of a .sin
11530 67 6c 65 20 73 65 63 74 6f 72 20 28 61 73 20 64  gle sector (as d
11540 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 73 65  efined by the se
11550 63 74 6f 72 20 73 69 7a 65 20 69 6e 74 65 67 65  ctor size intege
11560 72 20 61 74 20 6f 66 66 73 65 74 20 32 30 29 2e  r at offset 20).
11570 0a 54 68 65 20 68 65 61 64 65 72 20 69 73 20 69  .The header is i
11580 6e 20 61 20 73 65 63 74 6f 72 20 62 79 20 69 74  n a sector by it
11590 73 65 6c 66 20 73 6f 20 74 68 61 74 20 69 66 20  self so that if 
115a0 61 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63  a power loss occ
115b0 75 72 73 20 77 68 69 6c 65 0a 77 72 69 74 69 6e  urs while.writin
115c0 67 20 74 68 65 20 73 65 63 74 6f 72 2c 20 69 6e  g the sector, in
115d0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 66  formation that f
115e0 6f 6c 6c 6f 77 73 20 74 68 65 20 68 65 61 64 65  ollows the heade
115f0 72 20 77 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66  r will be.(hopef
11600 75 6c 6c 79 29 20 75 6e 64 61 6d 61 67 65 64 2e  ully) undamaged.
11610 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20  </p>..<p>^After 
11620 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 7a  the header and z
11630 65 72 6f 20 70 61 64 64 69 6e 67 20 61 72 65 20  ero padding are 
11640 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67  zero or more pag
11650 65 20 72 65 63 6f 72 64 73 2e 20 20 5e 45 61 63  e records.  ^Eac
11660 68 0a 70 61 67 65 20 72 65 63 6f 72 64 20 73 74  h.page record st
11670 6f 72 65 73 20 61 20 63 6f 70 79 20 6f 66 20 74  ores a copy of t
11680 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
11690 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61  page from the da
116a0 74 61 62 61 73 65 20 66 69 6c 65 0a 62 65 66 6f  tabase file.befo
116b0 72 65 20 69 74 20 77 61 73 20 63 68 61 6e 67 65  re it was change
116c0 64 2e 20 20 5e 54 68 65 20 73 61 6d 65 20 70 61  d.  ^The same pa
116d0 67 65 20 6d 61 79 20 6e 6f 74 20 61 70 70 65 61  ge may not appea
116e0 72 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  r more than once
116f0 0a 77 69 74 68 69 6e 20 61 20 73 69 6e 67 6c 65  .within a single
11700 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
11710 6c 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  l..To rollback a
11720 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61  n incomplete tra
11730 6e 73 61 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63  nsaction, a proc
11740 65 73 73 0a 68 61 73 20 6d 65 72 65 6c 79 20 74  ess.has merely t
11750 6f 20 72 65 61 64 20 74 68 65 20 72 6f 6c 6c 62  o read the rollb
11760 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d  ack journal from
11770 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e   beginning to en
11780 64 20 61 6e 64 0a 77 72 69 74 65 20 70 61 67 65  d and.write page
11790 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a  s found in the j
117a0 6f 75 72 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f  ournal back into
117b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
117c0 6c 65 20 61 74 20 74 68 65 0a 61 70 70 72 6f 70  le at the.approp
117d0 72 69 61 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c  riate location.<
117e0 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20  /p>..<p>Let the 
117f0 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
11800 7a 65 20 28 74 68 65 20 76 61 6c 75 65 20 6f 66  ze (the value of
11810 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
11820 6f 66 66 73 65 74 20 32 34 20 0a 69 6e 20 74 68  offset 24 .in th
11830 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  e journal header
11840 29 20 62 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65  ) be N..Then the
11850 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 70 61 67   format of a pag
11860 65 20 72 65 63 6f 72 64 20 69 73 20 61 73 20 66  e record is as f
11870 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65  ollows:</p>..<ce
11880 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63  nter>.<i>Rollbac
11890 6b 20 4a 6f 75 72 6e 61 6c 20 50 61 67 65 20 52  k Journal Page R
118a0 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e  ecord Format</i>
118b0 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
118c0 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
118d0 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
118e0 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
118f0 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 5e 28 3c 74  ription.<tr>^(<t
11900 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
11910 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20  gn=center>0.    
11920 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11930 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
11940 20 20 3c 74 64 3e 54 68 65 20 70 61 67 65 20 6e    <td>The page n
11950 75 6d 62 65 72 20 69 6e 20 74 68 65 20 64 61 74  umber in the dat
11960 61 62 61 73 65 20 66 69 6c 65 29 5e 0a 3c 74 72  abase file)^.<tr
11970 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >^(<td valign=to
11980 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
11990 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
119a0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
119b0 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67 69  >N.    <td>Origi
119c0 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  nal content of t
119d0 68 65 20 70 61 67 65 20 70 72 69 6f 72 20 74 6f  he page prior to
119e0 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
119f0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 29 5e 0a  e transaction)^.
11a00 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e  <tr>^(<td valign
11a10 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11a20 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76 61  r>N+4.    <td va
11a30 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
11a40 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
11a50 43 68 65 63 6b 73 75 6d 29 5e 0a 3c 2f 74 61 62  Checksum)^.</tab
11a60 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a  le>.</center>...
11a70 3c 70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73 75  <p>^(The checksu
11a80 6d 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  m is an unsigned
11a90 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
11aa0 63 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c 6c  computed as foll
11ab0 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ows:</p>..<ol>.<
11ac0 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74 68  li>Initialize th
11ad0 65 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74 68  e checksum to th
11ae0 65 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63 65  e checksum nonce
11af0 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e 20   value found in 
11b00 74 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64  the.journal head
11b10 65 72 20 61 74 20 6f 66 66 73 65 74 20 31 32 2e  er at offset 12.
11b20 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20  .<li>Initialize 
11b30 69 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e 2d  index X to be N-
11b40 32 30 30 20 28 77 68 65 72 65 20 4e 20 69 73 20  200 (where N is 
11b50 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64 61  the size of a da
11b60 74 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20 62  tabase page.in b
11b70 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70  ytes..<li>Interp
11b80 72 65 74 20 74 68 65 20 66 6f 75 72 20 62 79 74  ret the four byt
11b90 65 73 20 61 74 20 6f 66 66 73 65 74 20 58 20 69  es at offset X i
11ba0 6e 74 6f 20 74 68 65 20 70 61 67 65 20 61 73 20  nto the page as 
11bb0 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
11bc0 69 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74  ian.unsigned int
11bd0 65 67 65 72 2e 20 20 41 64 64 20 74 68 65 20 76  eger.  Add the v
11be0 61 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e 74  alue of that int
11bf0 65 67 65 72 20 74 6f 20 74 68 65 20 63 68 65 63  eger to the chec
11c00 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72 61  ksum..<li>Subtra
11c10 63 65 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a 3c  ce 200 from X..<
11c20 6c 69 3e 49 66 20 58 20 69 73 20 67 72 65 61 74  li>If X is great
11c30 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
11c40 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61 63   to zero, go bac
11c50 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f 6f  k to step 3..</o
11c60 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68 65  l>)^..<p>The che
11c70 63 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20 75  cksum value is u
11c80 73 65 64 20 74 6f 20 67 75 61 72 64 20 61 67 61  sed to guard aga
11c90 69 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65 20  inst incomplete 
11ca0 77 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75 72  writes of.a jour
11cb0 6e 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64 20  nal page record 
11cc0 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65  following a powe
11cd0 72 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64 69  r failure.  A di
11ce0 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e  fferent random n
11cf0 6f 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61 63  once.is used eac
11d00 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61 63  h time a transac
11d10 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20  tion is started 
11d20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69  in order to mini
11d30 6d 69 7a 65 20 74 68 65 20 72 69 73 6b 0a 74 68  mize the risk.th
11d40 61 74 20 75 6e 77 72 69 74 74 65 6e 20 73 65 63  at unwritten sec
11d50 74 6f 72 73 20 6d 69 67 68 74 20 62 79 20 63 68  tors might by ch
11d60 61 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64 61 74  ance contain dat
11d70 61 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20  a from the same 
11d80 70 61 67 65 0a 74 68 61 74 20 77 61 73 20 61 20  page.that was a 
11d90 70 61 72 74 20 6f 66 20 70 72 69 6f 72 20 6a 6f  part of prior jo
11da0 75 72 6e 61 6c 73 2e 20 20 42 79 20 63 68 61 6e  urnals.  By chan
11db0 67 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20 66  ging the nonce f
11dc0 6f 72 20 65 61 63 68 0a 74 72 61 6e 73 61 63 74  or each.transact
11dd0 69 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74 61 20  ion, stale data 
11de0 6f 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73 74 69  on disk will sti
11df0 6c 6c 20 67 65 6e 65 72 61 74 65 20 61 6e 20 69  ll generate an i
11e00 6e 63 6f 72 72 65 63 74 20 63 68 65 63 6b 73 75  ncorrect checksu
11e10 6d 0a 61 6e 64 20 62 65 20 64 65 74 65 63 74 65  m.and be detecte
11e20 64 20 77 69 74 68 20 68 69 67 68 20 70 72 6f 62  d with high prob
11e30 61 62 69 6c 69 74 79 2e 20 20 54 68 65 20 63 68  ability.  The ch
11e40 65 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65 73  ecksum only uses
11e50 20 61 20 73 70 61 72 73 65 20 73 61 6d 70 6c 65   a sparse sample
11e60 0a 6f 66 20 33 32 2d 62 69 74 20 77 6f 72 64 73  .of 32-bit words
11e70 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20 72   from the data r
11e80 65 63 6f 72 64 20 66 6f 72 20 70 65 72 66 6f 72  ecord for perfor
11e90 6d 61 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d 20  mance reasons - 
11ea0 64 65 73 69 67 6e 20 73 74 75 64 69 65 73 20 0a  design studies .
11eb0 64 75 72 69 6e 67 20 74 68 65 20 70 6c 61 6e 6e  during the plann
11ec0 69 6e 67 20 70 68 61 73 65 73 20 6f 66 20 53 51  ing phases of SQ
11ed0 4c 69 74 65 20 33 2e 30 2e 30 20 73 68 6f 77 65  Lite 3.0.0 showe
11ee0 64 0a 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20  d.a significant 
11ef0 70 65 72 66 6f 72 6d 61 6e 63 65 20 68 69 74 20  performance hit 
11f00 69 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67 20  in checksumming 
11f10 74 68 65 20 65 6e 74 69 72 65 20 70 61 67 65 2e  the entire page.
11f20 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65  </p>..<p>Let the
11f30 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75   page count valu
11f40 65 20 61 74 20 6f 66 66 73 65 74 20 38 20 69 6e  e at offset 8 in
11f50 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61   the journal hea
11f60 64 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d 20  der be M..^If M 
11f70 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
11f80 7a 65 72 6f 20 74 68 65 6e 20 61 66 74 65 72 20  zero then after 
11f90 4d 20 70 61 67 65 20 72 65 63 6f 72 64 73 20 74  M page records t
11fa0 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a  he journal file.
11fb0 6d 61 79 20 62 65 20 7a 65 72 6f 20 70 61 64 64  may be zero padd
11fc0 65 64 20 6f 75 74 20 74 6f 20 74 68 65 20 6e 65  ed out to the ne
11fd0 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74  xt multiple of t
11fe0 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20 61  he sector size a
11ff0 6e 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e  nd another.journ
12000 61 6c 20 68 65 61 64 65 72 20 6d 61 79 20 62 65  al header may be
12010 20 69 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c 6c   inserted.  ^All
12020 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 73   journal headers
12030 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
12040 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63 6f  .journal must co
12050 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 64  ntain the same d
12060 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
12070 65 20 61 6e 64 20 73 65 63 74 6f 72 20 73 69 7a  e and sector siz
12080 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d  e.</p>..<p>^If M
12090 20 69 73 20 2d 31 20 69 6e 20 74 68 65 20 69 6e   is -1 in the in
120a0 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68 65  itial journal he
120b0 61 64 65 72 2c 20 74 68 65 6e 20 74 68 65 20 6e  ader, then the n
120c0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 20 72 65  umber of page re
120d0 63 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c 6f  cords.that follo
120e0 77 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  w is computed by
120f0 20 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20 6d   computing how m
12100 61 6e 79 20 70 61 67 65 20 72 65 63 6f 72 64 73  any page records
12110 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68 65   will fit in.the
12120 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65   available space
12130 20 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 64 65   of the remainde
12140 72 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  r of the journal
12150 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   file.</p>..<tcl
12160 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c  >hd_fragment wal
12170 66 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72 6d  format {WAL form
12180 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 34 2e  at}</tcl>.<h2>4.
12190 30 20 54 68 65 20 57 72 69 74 65 2d 41 68 65 61  0 The Write-Ahea
121a0 64 20 4c 6f 67 3c 2f 68 32 3e 0a 0a 3c 70 3e 42  d Log</h2>..<p>B
121b0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b 76  eginning with [v
121c0 65 72 73 69 6f 6e 20 33 2e 37 2e 30 5d 2c 20 53  ersion 3.7.0], S
121d0 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 61  QLite supports a
121e0 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e   new transaction
121f0 0a 63 6f 6e 74 72 6f 6c 20 6d 65 63 68 61 6e 69  .control mechani
12200 73 6d 20 63 61 6c 6c 65 64 20 22 5b 57 41 4c 20  sm called "[WAL 
12210 7c 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  | write-ahead lo
12220 67 5d 22 20 6f 72 20 22 5b 57 41 4c 5d 22 2e 0a  g]" or "[WAL]"..
12230 5e 57 68 65 6e 20 61 20 64 61 74 61 62 61 73 65  ^When a database
12240 20 69 73 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2c   is in WAL mode,
12250 20 61 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 73   all connections
12260 20 74 6f 20 74 68 61 74 20 64 61 74 61 62 61 73   to that databas
12270 65 20 6d 75 73 74 0a 75 73 65 20 74 68 65 20 57  e must.use the W
12280 41 4c 2e 20 20 5e 41 20 70 61 72 74 69 63 75 6c  AL.  ^A particul
12290 61 72 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c  ar database will
122a0 20 75 73 65 20 65 69 74 68 65 72 20 61 20 72 6f   use either a ro
122b0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 6f  llback journal.o
122c0 72 20 61 20 57 41 4c 2c 20 62 75 74 20 6e 6f 74  r a WAL, but not
122d0 20 62 6f 74 68 20 61 74 20 74 68 65 20 73 61 6d   both at the sam
122e0 65 20 74 69 6d 65 2e 0a 5e 54 68 65 20 57 41 4c  e time..^The WAL
122f0 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74   is always locat
12300 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64  ed in the same d
12310 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65 20  irectory as the 
12320 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e  database.file an
12330 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e  d has the same n
12340 61 6d 65 20 61 73 20 74 68 65 20 64 61 74 61 62  ame as the datab
12350 61 73 65 20 66 69 6c 65 20 62 75 74 20 77 69 74  ase file but wit
12360 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74  h the string."<t
12370 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61 70 70  t>-wal</tt>" app
12380 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  ended.</p>..<h3>
12390 34 2e 31 20 57 41 4c 20 46 69 6c 65 20 46 6f 72  4.1 WAL File For
123a0 6d 61 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 57  mat</h4>..<p>A W
123b0 41 4c 20 66 69 6c 65 20 63 6f 6e 73 69 73 74 73  AL file consists
123c0 20 6f 66 20 61 20 68 65 61 64 65 72 20 66 6f 6c   of a header fol
123d0 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
123e0 20 6d 6f 72 65 20 22 66 72 61 6d 65 73 22 2e 0a   more "frames"..
123f0 45 61 63 68 20 66 72 61 6d 65 20 72 65 63 6f 72  Each frame recor
12400 64 73 20 74 68 65 20 72 65 76 69 73 65 64 20 63  ds the revised c
12410 6f 6e 74 65 6e 74 20 6f 66 20 61 20 73 69 6e 67  ontent of a sing
12420 6c 65 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65  le page from the
12430 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20  .database file. 
12440 20 41 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f 20   All changes to 
12450 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
12460 20 72 65 63 6f 72 64 65 64 20 62 79 20 77 72 69   recorded by wri
12470 74 69 6e 67 0a 66 72 61 6d 65 73 20 69 6e 74 6f  ting.frames into
12480 20 74 68 65 20 57 41 4c 2e 20 20 54 72 61 6e 73   the WAL.  Trans
12490 61 63 74 69 6f 6e 73 20 63 6f 6d 6d 69 74 20 77  actions commit w
124a0 68 65 6e 20 61 20 66 72 61 6d 65 20 69 73 20 77  hen a frame is w
124b0 72 69 74 74 65 6e 20 74 68 61 74 0a 63 6f 6e 74  ritten that.cont
124c0 61 69 6e 73 20 61 20 63 6f 6d 6d 69 74 20 6d 61  ains a commit ma
124d0 72 6b 65 72 2e 20 20 5e 41 20 73 69 6e 67 6c 65  rker.  ^A single
124e0 20 57 41 4c 20 63 61 6e 20 61 6e 64 20 75 73 75   WAL can and usu
124f0 61 6c 6c 79 20 64 6f 65 73 20 72 65 63 6f 72 64  ally does record
12500 20 0a 6d 75 6c 74 69 70 6c 65 20 74 72 61 6e 73   .multiple trans
12510 61 63 74 69 6f 6e 73 2e 20 20 50 65 72 69 6f 64  actions.  Period
12520 69 63 61 6c 6c 79 2c 20 74 68 65 20 63 6f 6e 74  ically, the cont
12530 65 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69  ent of the WAL i
12540 73 0a 74 72 61 6e 73 66 65 72 72 65 64 20 62 61  s.transferred ba
12550 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ck into the data
12560 62 61 73 65 20 66 69 6c 65 20 69 6e 20 61 6e 20  base file in an 
12570 6f 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c 65 64  operation called
12580 20 61 0a 22 63 68 65 63 6b 70 6f 69 6e 74 22 2e   a."checkpoint".
12590 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69 6e 67  </p>..<p>^A sing
125a0 6c 65 20 57 41 4c 20 66 69 6c 65 20 63 61 6e 20  le WAL file can 
125b0 62 65 20 72 65 75 73 65 64 20 6d 75 6c 74 69 70  be reused multip
125c0 6c 65 20 74 69 6d 65 73 2e 20 20 5e 49 6e 20 6f  le times.  ^In o
125d0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a  ther words, the.
125e0 57 41 4c 20 63 61 6e 20 66 69 6c 6c 20 75 70 20  WAL can fill up 
125f0 77 69 74 68 20 66 72 61 6d 65 73 20 61 6e 64 20  with frames and 
12600 74 68 65 6e 20 62 65 20 63 68 65 63 6b 70 6f 69  then be checkpoi
12610 6e 74 65 64 20 61 6e 64 20 74 68 65 6e 20 6e 65  nted and then ne
12620 77 0a 66 72 61 6d 65 73 20 63 61 6e 20 6f 76 65  w.frames can ove
12630 72 77 72 69 74 65 20 74 68 65 20 6f 6c 64 20 6f  rwrite the old o
12640 6e 65 73 2e 20 20 5e 41 20 57 41 4c 20 61 6c 77  nes.  ^A WAL alw
12650 61 79 73 20 67 72 6f 77 73 20 66 72 6f 6d 20 62  ays grows from b
12660 65 67 69 6e 6e 69 6e 67 0a 74 6f 77 61 72 64 20  eginning.toward 
12670 74 68 65 20 65 6e 64 2e 20 20 43 68 65 63 6b 73  the end.  Checks
12680 75 6d 73 20 61 6e 64 20 63 6f 75 6e 74 65 72 73  ums and counters
12690 20 61 74 74 61 63 68 65 64 20 74 6f 20 65 61 63   attached to eac
126a0 68 20 66 72 61 6d 65 20 61 72 65 0a 75 73 65 64  h frame are.used
126b0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
126c0 69 63 68 20 66 72 61 6d 65 73 20 77 69 74 68 69  ich frames withi
126d0 6e 20 74 68 65 20 57 41 4c 20 61 72 65 20 76 61  n the WAL are va
126e0 6c 69 64 20 61 6e 64 20 77 68 69 63 68 0a 61 72  lid and which.ar
126f0 65 20 6c 65 66 74 6f 76 65 72 73 20 66 72 6f 6d  e leftovers from
12700 20 70 72 69 6f 72 20 63 68 65 63 6b 70 6f 69 6e   prior checkpoin
12710 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68  ts.</p>..<p>^(Th
12720 65 20 57 41 4c 20 68 65 61 64 65 72 20 69 73 20  e WAL header is 
12730 33 32 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65  32 bytes in size
12740 20 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66   and consists of
12750 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65   the following e
12760 69 67 68 74 0a 62 69 67 2d 65 6e 64 69 61 6e 20  ight.big-endian 
12770 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20  32-bit unsigned 
12780 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 3a 3c  integer values:<
12790 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  /p>..<center>.<i
127a0 3e 57 41 4c 20 48 65 61 64 65 72 20 46 6f 72 6d  >WAL Header Form
127b0 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
127c0 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
127d0 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
127e0 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
127f0 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
12800 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12810 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c   align=center>0<
12820 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12830 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
12840 20 3c 74 64 3e 4d 61 67 69 63 20 6e 75 6d 62 65   <td>Magic numbe
12850 72 2e 20 20 30 78 33 37 37 66 30 36 38 32 20 6f  r.  0x377f0682 o
12860 72 20 30 78 33 37 37 66 30 36 38 33 0a 3c 74 72  r 0x377f0683.<tr
12870 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12880 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
12890 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
128a0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
128b0 3c 74 64 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20  <td>File format 
128c0 76 65 72 73 69 6f 6e 2e 20 20 43 75 72 72 65 6e  version.  Curren
128d0 74 6c 79 20 33 30 30 37 30 30 30 2e 0a 3c 74 72  tly 3007000..<tr
128e0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
128f0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74  align=center>8<t
12900 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12910 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
12920 3c 74 64 3e 44 61 74 61 62 61 73 65 20 70 61 67  <td>Database pag
12930 65 20 73 69 7a 65 2e 20 20 45 78 61 6d 70 6c 65  e size.  Example
12940 3a 20 31 30 32 34 0a 3c 74 72 3e 3c 74 64 20 76  : 1024.<tr><td v
12950 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12960 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c  center>12<td val
12970 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12980 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
12990 68 65 63 6b 70 6f 69 6e 74 20 73 65 71 75 65 6e  heckpoint sequen
129a0 63 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74  ce number.<tr><t
129b0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
129c0 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20  gn=center>16<td 
129d0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
129e0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
129f0 64 3e 53 61 6c 74 2d 31 3a 20 72 61 6e 64 6f 6d  d>Salt-1: random
12a00 20 69 6e 74 65 67 65 72 20 69 6e 63 72 65 6d 65   integer increme
12a10 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
12a20 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74  heckpoint.<tr><t
12a30 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12a40 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20  gn=center>20<td 
12a50 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12a60 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
12a70 64 3e 53 61 6c 74 2d 32 3a 20 61 20 64 69 66 66  d>Salt-2: a diff
12a80 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 75 6d  erent random num
12a90 62 65 72 20 66 6f 72 20 65 61 63 68 20 63 68 65  ber for each che
12aa0 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20  ckpoint.<tr><td 
12ab0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12ac0 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64 20 76 61  =center>24<td va
12ad0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12ae0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
12af0 43 68 65 63 6b 73 75 6d 2d 31 3a 20 46 69 72 73  Checksum-1: Firs
12b00 74 20 70 61 72 74 20 6f 66 20 61 20 63 68 65 63  t part of a chec
12b10 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73  ksum on the firs
12b20 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 68 65  t 24 bytes of he
12b30 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ader.<tr><td val
12b40 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12b50 6e 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67  nter>28<td valig
12b60 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12b70 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65  er>4.    <td>Che
12b80 63 6b 73 75 6d 2d 32 3a 20 53 65 63 6f 6e 64 20  cksum-2: Second 
12b90 70 61 72 74 20 6f 66 20 74 68 65 20 63 68 65 63  part of the chec
12ba0 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73  ksum on the firs
12bb0 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 68 65  t 24 bytes of he
12bc0 61 64 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  ader.</table>.</
12bd0 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 49  center>)^..<p>^I
12be0 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
12bf0 77 69 6e 67 20 74 68 65 20 77 61 6c 2d 68 65 61  wing the wal-hea
12c00 64 65 72 20 61 72 65 20 7a 65 72 6f 20 6f 72 20  der are zero or 
12c10 6d 6f 72 65 20 66 72 61 6d 65 73 2e 20 5e 45 61  more frames. ^Ea
12c20 63 68 0a 66 72 61 6d 65 20 63 6f 6e 73 69 73 74  ch.frame consist
12c30 73 20 6f 66 20 61 20 32 34 2d 62 79 74 65 20 66  s of a 24-byte f
12c40 72 61 6d 65 2d 68 65 61 64 65 72 20 66 6f 6c 6c  rame-header foll
12c50 6f 77 65 64 20 62 79 20 61 20 3c 69 3e 70 61 67  owed by a <i>pag
12c60 65 2d 73 69 7a 65 3c 2f 69 3e 20 62 79 74 65 73  e-size</i> bytes
12c70 0a 6f 66 20 70 61 67 65 20 64 61 74 61 2e 20 5e  .of page data. ^
12c80 28 54 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65  (The frame-heade
12c90 72 20 69 73 20 73 69 78 20 62 69 67 2d 65 6e 64  r is six big-end
12ca0 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67  ian 32-bit unsig
12cb0 6e 65 64 20 0a 69 6e 74 65 67 65 72 20 76 61 6c  ned .integer val
12cc0 75 65 73 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  ues, as follows:
12cd0 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41  ..<center>.<i>WA
12ce0 4c 20 46 72 61 6d 65 20 48 65 61 64 65 72 20 46  L Frame Header F
12cf0 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
12d00 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22  able width="80%"
12d10 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c   border=1>.<tr><
12d20 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a  th>Offset<th>Siz
12d30 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e  e<th>Description
12d40 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12d50 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12d60 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >0<td valign=top
12d70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
12d80 20 20 20 20 3c 74 64 3e 50 61 67 65 20 6e 75 6d      <td>Page num
12d90 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ber.<tr><td vali
12da0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12db0 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>4<td valign=
12dc0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12dd0 3e 34 0a 20 20 20 20 3c 74 64 3e 46 6f 72 20 63  >4.    <td>For c
12de0 6f 6d 6d 69 74 20 72 65 63 6f 72 64 73 2c 20 74  ommit records, t
12df0 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  he size of the d
12e00 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20  atabase file in 
12e10 70 61 67 65 73 0a 20 20 20 20 20 20 20 20 61 66  pages.        af
12e20 74 65 72 20 74 68 65 20 63 6f 6d 6d 69 74 2e 20  ter the commit. 
12e30 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 72   For all other r
12e40 65 63 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a 3c 74  ecords, zero..<t
12e50 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12e60 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c   align=center>8<
12e70 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12e80 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
12e90 20 3c 74 64 3e 53 61 6c 74 2d 31 20 63 6f 70 69   <td>Salt-1 copi
12ea0 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20  ed from the WAL 
12eb0 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76  header.<tr><td v
12ec0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12ed0 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c  center>12<td val
12ee0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12ef0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53  nter>4.    <td>S
12f00 61 6c 74 2d 32 20 63 6f 70 69 65 64 20 66 72 6f  alt-2 copied fro
12f10 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  m the WAL header
12f20 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12f30 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12f40 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >16<td valign=to
12f50 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12f60 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75  .    <td>Checksu
12f70 6d 2d 31 3a 20 20 43 75 6d 75 6c 61 74 69 76 65  m-1:  Cumulative
12f80 20 63 68 65 63 6b 73 75 6d 20 75 70 20 74 68 72   checksum up thr
12f90 6f 75 67 68 20 61 6e 64 20 69 6e 63 6c 75 64 69  ough and includi
12fa0 6e 67 20 74 68 69 73 20 70 61 67 65 0a 3c 74 72  ng this page.<tr
12fb0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12fc0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c  align=center>20<
12fd0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12fe0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
12ff0 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a   <td>Checksum-2:
13000 20 20 53 65 63 6f 6e 64 20 68 61 6c 66 20 6f 66    Second half of
13010 20 74 68 65 20 63 75 6d 75 6c 61 74 69 76 65 20   the cumulative 
13020 63 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61 62 6c  checksum..</tabl
13030 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  e>.</center>)^..
13040 5e 28 3c 70 3e 41 20 66 72 61 6d 65 20 69 73 20  ^(<p>A frame is 
13050 63 6f 6e 73 69 64 65 72 65 64 20 76 61 6c 69 64  considered valid
13060 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
13070 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
13080 6e 64 69 74 69 6f 6e 73 20 61 72 65 0a 74 72 75  nditions are.tru
13090 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  e:</p>..<ol>.<li
130a0 3e 3c 70 3e 54 68 65 20 73 61 6c 74 2d 31 20 61  ><p>The salt-1 a
130b0 6e 64 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 73  nd salt-2 values
130c0 20 69 6e 20 74 68 65 20 66 72 61 6d 65 2d 68 65   in the frame-he
130d0 61 64 65 72 20 6d 61 74 63 68 0a 20 20 20 20 20  ader match.     
130e0 20 20 73 61 6c 74 20 76 61 6c 75 65 73 20 69 6e    salt values in
130f0 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72 3c   the wal-header<
13100 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70  /p></li>..<li><p
13110 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61  >The checksum va
13120 6c 75 65 73 20 69 6e 20 74 68 65 20 66 69 6e 61  lues in the fina
13130 6c 20 38 20 62 79 74 65 73 20 6f 66 20 74 68 65  l 8 bytes of the
13140 20 66 72 61 6d 65 2d 68 65 61 64 65 72 0a 20 20   frame-header.  
13150 20 20 20 20 20 65 78 61 63 74 6c 79 20 6d 61 74       exactly mat
13160 63 68 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20  ch the checksum 
13170 63 6f 6d 70 75 74 65 64 20 63 6f 6e 73 65 63 75  computed consecu
13180 74 69 76 65 6c 79 20 6f 6e 20 74 68 65 0a 20 20  tively on the.  
13190 20 20 20 20 20 66 69 72 73 74 20 32 34 20 62 79       first 24 by
131a0 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68  tes of the WAL h
131b0 65 61 64 65 72 20 61 6e 64 20 74 68 65 20 66 69  eader and the fi
131c0 72 73 74 20 38 20 62 79 74 65 73 20 61 6e 64 0a  rst 8 bytes and.
131d0 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e 74 65         the conte
131e0 6e 74 20 6f 66 20 61 6c 6c 20 66 72 61 6d 65 73  nt of all frames
131f0 0a 20 20 20 20 20 20 20 75 70 20 74 6f 20 61 6e  .       up to an
13200 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  d including the 
13210 63 75 72 72 65 6e 74 20 66 72 61 6d 65 2e 3c 2f  current frame.</
13220 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f  p></li></li>.</o
13230 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  l>)^..<tcl>hd_fr
13240 61 67 6d 65 6e 74 20 77 61 6c 63 6b 73 6d 20 7b  agment walcksm {
13250 57 41 4c 20 63 68 65 63 6b 73 75 6d 20 61 6c 67  WAL checksum alg
13260 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68  orithm}</tcl>.<h
13270 33 3e 34 2e 32 20 43 68 65 63 6b 73 75 6d 20 41  3>4.2 Checksum A
13280 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c  lgorithm</h3>..<
13290 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69  p>The checksum i
132a0 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 69 6e  s computed by in
132b0 74 65 72 70 72 65 74 69 6e 67 20 74 68 65 20 69  terpreting the i
132c0 6e 70 75 74 20 61 73 0a 61 6e 20 65 76 65 6e 20  nput as.an even 
132d0 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73 69 67 6e  number of unsign
132e0 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  ed 32-bit intege
132f0 72 73 3a 20 78 28 30 29 20 74 68 72 6f 75 67 68  rs: x(0) through
13300 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33 32 2d 62   x(N)..^The 32-b
13310 69 74 20 69 6e 74 65 67 65 72 73 20 61 72 65 20  it integers are 
13320 62 69 67 2d 65 6e 64 69 61 6e 20 69 66 20 74 68  big-endian if th
13330 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69  e.magic number i
13340 6e 20 74 68 65 20 66 69 72 73 74 20 34 20 62 79  n the first 4 by
13350 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68  tes of the WAL h
13360 65 61 64 65 72 20 69 73 20 30 78 33 37 37 66 30  eader is 0x377f0
13370 36 38 33 20 61 6e 64 0a 74 68 65 20 69 6e 74 65  683 and.the inte
13380 67 65 72 73 20 61 72 65 20 6c 69 74 74 6c 65 2d  gers are little-
13390 65 6e 64 69 61 6e 20 69 66 20 74 68 65 20 6d 61  endian if the ma
133a0 67 69 63 20 6e 75 6d 62 65 72 20 69 73 20 30 78  gic number is 0x
133b0 33 37 37 66 30 36 38 32 2e 0a 5e 54 68 65 20 63  377f0682..^The c
133c0 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 61  hecksum values a
133d0 72 65 20 61 6c 77 61 79 73 20 73 74 6f 72 65 64  re always stored
133e0 20 69 6e 20 74 68 65 20 66 72 61 6d 65 20 68 65   in the frame he
133f0 61 64 65 72 20 69 6e 20 61 0a 62 69 67 2d 65 6e  ader in a.big-en
13400 64 69 61 6e 20 66 6f 72 6d 61 74 20 72 65 67 61  dian format rega
13410 72 64 6c 65 73 73 20 6f 66 20 77 68 69 63 68 20  rdless of which 
13420 62 79 74 65 20 6f 72 64 65 72 20 69 73 20 75 73  byte order is us
13430 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68  ed to compute.th
13440 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f 70 3e 0a  e checksum.</p>.
13450 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d  .<p>The checksum
13460 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c 79 20   algorithm only 
13470 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e 74 65 6e  works for conten
13480 74 20 77 68 69 63 68 20 69 73 20 61 20 6d 75 6c  t which is a mul
13490 74 69 70 6c 65 20 6f 66 0a 38 20 62 79 74 65 73  tiple of.8 bytes
134a0 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 49 6e 20   in length.  In 
134b0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
134c0 74 68 65 20 69 6e 70 75 74 73 20 61 72 65 20 78  the inputs are x
134d0 28 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29  (0) through x(N)
134e0 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20 62 65 20  .then N must be 
134f0 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68 65 63 6b  odd..^(The check
13500 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 69 73  sum algorithm is
13510 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62   as follows:..<b
13520 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 20  lockquote><pre> 
13530 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a 66 6f 72  .s0 = s1 = 0.for
13540 20 69 20 66 72 6f 6d 20 30 20 74 6f 20 6e 2d 31   i from 0 to n-1
13550 20 73 74 65 70 20 32 3a 0a 20 20 20 73 30 20 2b   step 2:.   s0 +
13560 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a 20 20 20  = x(i) + s1;.   
13570 73 31 20 2b 3d 20 78 28 69 2b 31 29 20 2b 20 73  s1 += x(i+1) + s
13580 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72 65 73 75  0;.endfor.# resu
13590 6c 74 20 69 6e 20 73 30 20 61 6e 64 20 73 31 0a  lt in s0 and s1.
135a0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
135b0 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 6f  te>)^..<p>^The o
135c0 75 74 70 75 74 73 20 73 30 20 61 6e 64 20 73 31  utputs s0 and s1
135d0 20 61 72 65 20 62 6f 74 68 20 77 65 69 67 68 74   are both weight
135e0 65 64 20 63 68 65 63 6b 73 75 6d 73 20 75 73 69  ed checksums usi
135f0 6e 67 20 46 69 62 6f 6e 61 63 63 69 20 77 65 69  ng Fibonacci wei
13600 67 68 74 73 0a 69 6e 20 72 65 76 65 72 73 65 20  ghts.in reverse 
13610 6f 72 64 65 72 2e 20 20 28 5e 54 68 65 20 6c 61  order.  (^The la
13620 72 67 65 73 74 20 46 69 62 6f 6e 61 63 63 69 20  rgest Fibonacci 
13630 77 65 69 67 68 74 20 6f 63 63 75 72 73 20 6f 6e  weight occurs on
13640 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
13650 6e 74 0a 6f 66 20 74 68 65 20 73 65 71 75 65 6e  nt.of the sequen
13660 63 65 20 62 65 69 6e 67 20 73 75 6d 6d 65 64 2e  ce being summed.
13670 29 20 20 5e 54 68 65 20 73 31 20 76 61 6c 75 65  )  ^The s1 value
13680 20 73 70 61 6e 73 20 61 6c 6c 20 33 32 2d 62 69   spans all 32-bi
13690 74 20 69 6e 74 65 67 65 72 0a 74 65 72 6d 73 20  t integer.terms 
136a0 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  of the sequence 
136b0 77 68 65 72 65 61 73 20 73 30 20 6f 6d 69 74 73  whereas s0 omits
136c0 20 74 68 65 20 66 69 6e 61 6c 20 74 65 72 6d 2e   the final term.
136d0 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 33 20 43 68  </p>..<h3>4.3 Ch
136e0 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74  eckpoint Algorit
136f0 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 4f 6e 20  hm</h3>..<p>^On 
13700 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20  a [checkpoint], 
13710 74 68 65 20 57 41 4c 20 69 73 20 66 69 72 73 74  the WAL is first
13720 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73   flushed to pers
13730 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75  istent storage u
13740 73 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d  sing.the xSync m
13750 65 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71  ethod of the [sq
13760 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73  lite3_io_methods
13770 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20   | VFS]. .^Then 
13780 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66  valid content of
13790 20 74 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e   the WAL is tran
137a0 73 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65  sferred into the
137b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
137c0 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61  ^Finally, the da
137d0 74 61 62 61 73 65 20 69 73 20 66 6c 75 73 68 65  tabase is flushe
137e0 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20  d to persistent 
137f0 73 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e  storage using an
13800 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68  other.xSync meth
13810 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79  od call..The xSy
13820 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65  nc operations se
13830 72 76 65 20 61 73 20 77 72 69 74 65 20 62 61 72  rve as write bar
13840 72 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74  riers - all writ
13850 65 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f  es launched.befo
13860 72 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73  re the xSync mus
13870 74 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72  t complete befor
13880 65 20 61 6e 79 20 77 72 69 74 65 20 74 68 61 74  e any write that
13890 20 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72 20   launches after 
138a0 74 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73  the.xSync begins
138b0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72  .</p>..<p>^After
138c0 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74   each checkpoint
138d0 2c 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  , the WAL header
138e0 20 73 61 6c 74 2d 31 20 76 61 6c 75 65 20 69 73   salt-1 value is
138f0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
13900 20 74 68 65 20 0a 73 61 6c 74 2d 32 20 76 61 6c   the .salt-2 val
13910 75 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64  ue is randomized
13920 2e 20 20 54 68 69 73 20 70 72 65 76 65 6e 74 73  .  This prevents
13930 20 6f 6c 64 20 61 6e 64 20 6e 65 77 20 66 72 61   old and new fra
13940 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c 20 66  mes in the WAL f
13950 72 6f 6d 0a 62 65 69 6e 67 20 63 6f 6e 73 69 64  rom.being consid
13960 65 72 65 64 20 76 61 6c 69 64 20 61 74 20 74 68  ered valid at th
13970 65 20 73 61 6d 65 20 74 69 6d 65 20 61 6e 64 20  e same time and 
13980 62 65 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74  being checkpoint
13990 69 6e 67 20 74 6f 67 65 74 68 65 72 0a 66 6f 6c  ing together.fol
139a0 6c 6f 77 69 6e 67 20 61 20 63 72 61 73 68 2e 3c  lowing a crash.<
139b0 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
139c0 67 6d 65 6e 74 20 77 61 6c 72 65 61 64 20 7b 57  gment walread {W
139d0 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68  AL read algorith
139e0 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 34  m}</tcl>.<h3>4.4
139f0 20 52 65 61 64 65 72 20 41 6c 67 6f 72 69 74 68   Reader Algorith
13a00 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 6f 20  m</h3>..<p>^(To 
13a10 72 65 61 64 20 61 20 70 61 67 65 20 66 72 6f 6d  read a page from
13a20 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 63   the database (c
13a30 61 6c 6c 20 69 74 20 70 61 67 65 20 6e 75 6d 62  all it page numb
13a40 65 72 20 50 29 2c 20 61 20 72 65 61 64 65 72 0a  er P), a reader.
13a50 66 69 72 73 74 20 63 68 65 63 6b 73 20 74 68 65  first checks the
13a60 20 57 41 4c 20 74 6f 20 73 65 65 20 69 66 20 69   WAL to see if i
13a70 74 20 63 6f 6e 74 61 69 6e 73 20 70 61 67 65 20  t contains page 
13a80 50 2e 20 20 49 66 20 73 6f 2c 20 74 68 65 6e 20  P.  If so, then 
13a90 74 68 65 0a 6c 61 73 74 20 76 61 6c 69 64 20 69  the.last valid i
13aa0 6e 73 74 61 6e 63 65 20 6f 66 20 70 61 67 65 20  nstance of page 
13ab0 50 20 74 68 61 74 20 69 73 20 66 6f 6c 6c 6f 77  P that is follow
13ac0 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66  ed by a commit f
13ad0 72 61 6d 65 0a 6f 72 20 69 73 20 61 20 63 6f 6d  rame.or is a com
13ae0 6d 69 74 20 66 72 61 6d 65 20 69 74 73 65 6c 66  mit frame itself
13af0 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c   becomes the val
13b00 75 65 20 72 65 61 64 2e 29 5e 20 20 5e 49 66 20  ue read.)^  ^If 
13b10 74 68 65 20 57 41 4c 0a 63 6f 6e 74 61 69 6e 73  the WAL.contains
13b20 20 6e 6f 20 63 6f 70 69 65 73 20 6f 66 20 70 61   no copies of pa
13b30 67 65 20 50 20 74 68 61 74 20 61 72 65 20 76 61  ge P that are va
13b40 6c 69 64 20 61 6e 64 20 77 68 69 63 68 20 61 72  lid and which ar
13b50 65 20 61 20 63 6f 6d 6d 69 74 0a 66 72 61 6d 65  e a commit.frame
13b60 20 6f 72 20 61 72 65 20 66 6f 6c 6c 6f 77 65 64   or are followed
13b70 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61   by a commit fra
13b80 6d 65 2c 20 74 68 65 6e 20 70 61 67 65 20 50 20  me, then page P 
13b90 69 73 20 72 65 61 64 20 66 72 6f 6d 0a 74 68 65  is read from.the
13ba0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
13bb0 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61 72 74  /p>..<p>To start
13bc0 20 61 20 72 65 61 64 20 74 72 61 6e 73 61 63 74   a read transact
13bd0 69 6f 6e 2c 20 74 68 65 20 72 65 61 64 65 72 20  ion, the reader 
13be0 72 65 63 6f 72 64 73 20 74 68 65 20 69 6e 64 65  records the inde
13bf0 78 20 6f 66 20 74 68 65 20 6c 61 73 74 0a 76 61  x of the last.va
13c00 6c 69 64 20 66 72 61 6d 65 20 69 6e 20 74 68 65  lid frame in the
13c10 20 57 41 4c 2e 20 20 54 68 65 20 72 65 61 64 65   WAL.  The reade
13c20 72 20 75 73 65 73 20 74 68 69 73 20 72 65 63 6f  r uses this reco
13c30 72 64 65 64 20 22 6d 78 46 72 61 6d 65 22 20 76  rded "mxFrame" v
13c40 61 6c 75 65 0a 66 6f 72 20 61 6c 6c 20 73 75 62  alue.for all sub
13c50 73 65 71 75 65 6e 74 20 72 65 61 64 20 6f 70 65  sequent read ope
13c60 72 61 74 69 6f 6e 73 2e 20 20 4e 65 77 20 74 72  rations.  New tr
13c70 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62  ansactions can b
13c80 65 20 61 70 70 65 6e 64 65 64 0a 74 6f 20 74 68  e appended.to th
13c90 65 20 57 41 4c 2c 20 62 75 74 20 61 73 20 6c 6f  e WAL, but as lo
13ca0 6e 67 20 61 73 20 74 68 65 20 72 65 61 64 65 72  ng as the reader
13cb0 20 75 73 65 73 20 69 74 73 20 6f 72 69 67 69 6e   uses its origin
13cc0 61 6c 20 6d 78 46 72 61 6d 65 20 76 61 6c 75 65  al mxFrame value
13cd0 0a 61 6e 64 20 69 67 6e 6f 72 65 73 20 73 75 62  .and ignores sub
13ce0 73 65 71 75 65 6e 74 6c 79 20 61 70 70 65 6e 64  sequently append
13cf0 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65 20  ed content, the 
13d00 72 65 61 64 65 72 20 77 69 6c 6c 20 73 65 65 20  reader will see 
13d10 61 20 0a 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e  a .consistent sn
13d20 61 70 73 68 6f 74 20 6f 66 20 74 68 65 20 64 61  apshot of the da
13d30 74 61 62 61 73 65 20 66 72 6f 6d 20 61 20 73 69  tabase from a si
13d40 6e 67 6c 65 20 70 6f 69 6e 74 20 69 6e 20 74 69  ngle point in ti
13d50 6d 65 2e 20 20 0a 5e 54 68 69 73 20 74 65 63 68  me.  .^This tech
13d60 6e 69 71 75 65 20 61 6c 6c 6f 77 73 20 6d 75 6c  nique allows mul
13d70 74 69 70 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74  tiple concurrent
13d80 20 72 65 61 64 65 72 73 20 74 6f 20 76 69 65 77   readers to view
13d90 20 64 69 66 66 65 72 65 6e 74 20 0a 76 65 72 73   different .vers
13da0 69 6f 6e 73 20 6f 66 20 74 68 65 20 64 61 74 61  ions of the data
13db0 62 61 73 65 20 63 6f 6e 74 65 6e 74 20 73 69 6d  base content sim
13dc0 75 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f 70 3e  ultaneously.</p>
13dd0 0a 0a 3c 70 3e 54 68 65 20 72 65 61 64 65 72 20  ..<p>The reader 
13de0 61 6c 67 6f 72 69 74 68 6d 20 69 6e 20 74 68 65  algorithm in the
13df0 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
13e00 61 70 68 73 20 77 6f 72 6b 73 20 63 6f 72 72 65  aphs works corre
13e10 63 74 6c 79 2c 20 62 75 74 20 0a 62 65 63 61 75  ctly, but .becau
13e20 73 65 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61  se frames for pa
13e30 67 65 20 50 20 63 61 6e 20 61 70 70 65 61 72 20  ge P can appear 
13e40 61 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e 20  anywhere within 
13e50 74 68 65 20 57 41 4c 2c 20 74 68 65 0a 72 65 61  the WAL, the.rea
13e60 64 65 72 20 68 61 73 20 74 6f 20 73 63 61 6e 20  der has to scan 
13e70 74 68 65 20 65 6e 74 69 72 65 20 57 41 4c 20 6c  the entire WAL l
13e80 6f 6f 6b 69 6e 67 20 66 6f 72 20 70 61 67 65 20  ooking for page 
13e90 50 20 66 72 61 6d 65 73 2e 20 20 49 66 20 74 68  P frames.  If th
13ea0 65 0a 57 41 4c 20 69 73 20 6c 61 72 67 65 20 28  e.WAL is large (
13eb0 6d 75 6c 74 69 70 6c 65 20 6d 65 67 61 62 79 74  multiple megabyt
13ec0 65 73 20 69 73 20 74 79 70 69 63 61 6c 29 20 74  es is typical) t
13ed0 68 61 74 20 73 63 61 6e 20 63 61 6e 20 62 65 20  hat scan can be 
13ee0 73 6c 6f 77 2c 0a 61 6e 64 20 72 65 61 64 20 70  slow,.and read p
13ef0 65 72 66 6f 72 6d 61 6e 63 65 20 73 75 66 66 65  erformance suffe
13f00 72 73 2e 20 20 5e 54 6f 20 6f 76 65 72 63 6f 6d  rs.  ^To overcom
13f10 65 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20  e this problem, 
13f20 61 20 73 65 70 61 72 61 74 65 0a 64 61 74 61 20  a separate.data 
13f30 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64  structure called
13f40 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
13f50 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 74 6f 20  s maintained to 
13f60 65 78 70 65 64 69 74 65 20 74 68 65 0a 73 65 61  expedite the.sea
13f70 72 63 68 20 66 6f 72 20 66 72 61 6d 65 73 20 6f  rch for frames o
13f80 66 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 70  f a particular p
13f90 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  age.</p>..<tcl>h
13fa0 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 69 6e  d_fragment walin
13fb0 64 65 78 66 6f 72 6d 61 74 20 7b 77 61 6c 2d 69  dexformat {wal-i
13fc0 6e 64 65 78 7d 20 7b 57 41 4c 2d 69 6e 64 65 78  ndex} {WAL-index
13fd0 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c   format}</tcl>.<
13fe0 68 33 3e 34 2e 35 20 57 41 4c 2d 49 6e 64 65 78  h3>4.5 WAL-Index
13ff0 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70   Format</h3>..<p
14000 3e 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74  >Conceptually, t
14010 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
14020 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 74  shared memory, t
14030 68 6f 75 67 68 20 74 68 65 20 63 75 72 72 65 6e  hough the curren
14040 74 0a 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61  t.VFS implementa
14050 74 69 6f 6e 73 20 75 73 65 20 61 20 6d 6d 61 70  tions use a mmap
14060 70 65 64 20 66 69 6c 65 20 66 6f 72 20 74 68 65  ped file for the
14070 20 77 61 6c 2d 69 6e 64 65 78 2e 20 20 5e 54 68   wal-index.  ^Th
14080 65 20 6d 6d 61 70 70 65 64 0a 66 69 6c 65 20 69  e mmapped.file i
14090 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69  s in the same di
140a0 72 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64  rectory as the d
140b0 61 74 61 62 61 73 65 20 61 6e 64 20 68 61 73 20  atabase and has 
140c0 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0a 61 73  the same name.as
140d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69   the database wi
140e0 74 68 20 61 20 22 3c 74 74 3e 2d 73 68 6d 3c 2f  th a "<tt>-shm</
140f0 74 74 3e 22 20 73 75 66 66 69 78 20 61 70 70 65  tt>" suffix appe
14100 6e 64 65 64 2e 20 20 42 65 63 61 75 73 65 0a 74  nded.  Because.t
14110 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
14120 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 53  shared memory, S
14130 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73  QLite does not s
14140 75 70 70 6f 72 74 20 0a 5b 50 52 41 47 4d 41 20  upport .[PRAGMA 
14150 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c 20 6a  journal_mode | j
14160 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 5d  ournal_mode=WAL]
14170 20 0a 6f 6e 20 61 20 6e 65 74 77 6f 72 6b 20 66   .on a network f
14180 69 6c 65 73 79 73 74 65 6d 20 77 68 65 6e 20 63  ilesystem when c
14190 6c 69 65 6e 74 73 20 61 72 65 20 6f 6e 20 64 69  lients are on di
141a0 66 66 65 72 65 6e 74 20 6d 61 63 68 69 6e 65 73  fferent machines
141b0 2e 0a 41 6c 6c 20 75 73 65 72 73 20 6f 66 20 74  ..All users of t
141c0 68 65 20 64 61 74 61 62 61 73 65 20 6d 75 73 74  he database must
141d0 20 62 65 20 61 62 6c 65 20 74 6f 20 73 68 61 72   be able to shar
141e0 65 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  e the same memor
141f0 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 70  y.</p>..<p>The p
14200 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20 77 61  urpose of the wa
14210 6c 2d 69 6e 64 65 78 20 69 73 20 74 6f 20 61 6e  l-index is to an
14220 73 77 65 72 20 74 68 69 73 20 71 75 65 73 74 69  swer this questi
14230 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f 70 3e 0a  on quickly:</p>.
14240 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e  .<blockquote><i>
14250 0a 47 69 76 65 6e 20 61 20 70 61 67 65 20 6e 75  .Given a page nu
14260 6d 62 65 72 20 50 20 61 6e 64 20 61 20 6d 61 78  mber P and a max
14270 69 6d 75 6d 20 57 41 4c 20 66 72 61 6d 65 20 69  imum WAL frame i
14280 6e 64 65 78 20 4d 2c 0a 72 65 74 75 72 6e 20 74  ndex M,.return t
14290 68 65 20 6c 61 72 67 65 73 74 20 57 41 4c 20 66  he largest WAL f
142a0 72 61 6d 65 20 69 6e 64 65 78 20 66 6f 72 20 70  rame index for p
142b0 61 67 65 20 50 20 74 68 61 74 20 64 6f 65 73 20  age P that does 
142c0 6e 6f 74 20 65 78 63 65 65 64 20 4d 2c 20 0a 6f  not exceed M, .o
142d0 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66  r return NULL if
142e0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72   there are no fr
142f0 61 6d 65 73 20 66 6f 72 20 70 61 67 65 20 50 20  ames for page P 
14300 74 68 61 74 20 64 6f 20 6e 6f 74 20 65 78 63 65  that do not exce
14310 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63  ed M..</i></bloc
14320 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
14330 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65 20 69  <i>M</i> value i
14340 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70  n the previous p
14350 61 72 61 67 72 61 70 68 20 69 73 20 74 68 65 20  aragraph is the 
14360 22 6d 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a  "mxFrame" value.
14370 64 65 66 69 6e 65 64 20 69 6e 20 5b 57 41 4c 20  defined in [WAL 
14380 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 20 7c  read algorithm |
14390 20 73 65 63 74 69 6f 6e 20 34 2e 34 5d 20 74 68   section 4.4] th
143a0 61 74 20 69 73 20 72 65 61 64 20 61 74 20 74 68  at is read at th
143b0 65 20 73 74 61 72 74 20 0a 6f 66 20 61 20 74 72  e start .of a tr
143c0 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 68  ansaction and wh
143d0 69 63 68 20 64 65 66 69 6e 65 73 20 74 68 65 20  ich defines the 
143e0 6d 61 78 69 6d 75 6d 20 66 72 61 6d 65 20 66 72  maximum frame fr
143f0 6f 6d 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  om the WAL that 
14400 0a 74 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c  .the reader will
14410 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68   use.</p>..<p>Th
14420 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74  e wal-index is t
14430 72 61 6e 73 69 65 6e 74 2e 20 20 41 66 74 65 72  ransient.  After
14440 20 61 20 63 72 61 73 68 2c 20 74 68 65 20 77 61   a crash, the wa
14450 6c 2d 69 6e 64 65 78 20 69 73 0a 72 65 63 6f 6e  l-index is.recon
14460 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20 74 68  structed from th
14470 65 20 6f 72 69 67 69 6e 61 6c 20 57 41 4c 20 66  e original WAL f
14480 69 6c 65 2e 20 20 5e 54 68 65 20 56 46 53 20 69  ile.  ^The VFS i
14490 73 20 72 65 71 75 69 72 65 64 0a 74 6f 20 65 69  s required.to ei
144a0 74 68 65 72 20 74 72 75 6e 63 61 74 65 20 6f 72  ther truncate or
144b0 20 7a 65 72 6f 20 74 68 65 20 68 65 61 64 65 72   zero the header
144c0 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65   of the wal-inde
144d0 78 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 0a  x when the last.
144e0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 69 74  connection to it
144f0 20 63 6c 6f 73 65 73 2e 20 20 42 65 63 61 75 73   closes.  Becaus
14500 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  e the wal-index 
14510 69 73 20 74 72 61 6e 73 69 65 6e 74 2c 20 69 74  is transient, it
14520 20 63 61 6e 0a 75 73 65 20 61 6e 20 61 72 63 68   can.use an arch
14530 69 74 65 63 74 75 72 65 2d 73 70 65 63 69 66 69  itecture-specifi
14540 63 20 66 6f 72 6d 61 74 3b 20 69 74 20 64 6f 65  c format; it doe
14550 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65  s not have to be
14560 20 63 72 6f 73 73 2d 70 6c 61 74 66 6f 72 6d 2e   cross-platform.
14570 0a 48 65 6e 63 65 2c 20 75 6e 6c 69 6b 65 20 74  .Hence, unlike t
14580 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
14590 57 41 4c 20 66 69 6c 65 20 66 6f 72 6d 61 74 73  WAL file formats
145a0 20 77 68 69 63 68 20 73 74 6f 72 65 20 61 6c 6c   which store all
145b0 20 76 61 6c 75 65 73 0a 61 73 20 62 69 67 20 65   values.as big e
145c0 6e 64 69 61 6e 2c 20 74 68 65 20 77 61 6c 2d 69  ndian, the wal-i
145d0 6e 64 65 78 20 73 74 6f 72 65 73 20 6d 75 6c 74  ndex stores mult
145e0 69 2d 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e  i-byte values in
145f0 20 74 68 65 20 6e 61 74 69 76 65 0a 62 79 74 65   the native.byte
14600 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 68 6f   order of the ho
14610 73 74 20 63 6f 6d 70 75 74 65 72 2e 3c 2f 70 3e  st computer.</p>
14620 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65  ..<p>This docume
14630 6e 74 20 69 73 20 63 6f 6e 63 65 72 6e 65 64 20  nt is concerned 
14640 77 69 74 68 20 74 68 65 20 70 65 72 73 69 73 74  with the persist
14650 65 6e 74 20 73 74 61 74 65 20 6f 66 20 74 68 65  ent state of the
14660 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 2c 20   database.file, 
14670 61 6e 64 20 73 69 6e 63 65 20 74 68 65 20 77 61  and since the wa
14680 6c 2d 69 6e 64 65 78 20 69 73 20 61 20 74 72 61  l-index is a tra
14690 6e 73 69 65 6e 74 20 73 74 72 75 63 74 75 72 65  nsient structure
146a0 2c 20 6e 6f 20 66 75 72 74 68 65 72 20 0a 69 6e  , no further .in
146b0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
146c0 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
146d0 65 20 77 61 6c 2d 69 6e 64 65 78 20 77 69 6c 6c  e wal-index will
146e0 20 62 65 20 70 72 6f 76 69 64 65 64 20 68 65 72   be provided her
146f0 65 2e 0a 43 6f 6d 70 6c 65 74 65 20 64 65 74 61  e..Complete deta
14700 69 6c 73 20 6f 6e 20 74 68 65 20 66 6f 72 6d 61  ils on the forma
14710 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64  t of the wal-ind
14720 65 78 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ex are contained
14730 20 77 69 74 68 69 6e 0a 63 6f 6d 6d 65 6e 74 73   within.comments
14740 20 69 6e 20 53 51 4c 69 74 65 20 73 6f 75 72 63   in SQLite sourc
14750 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a              e code.</p>.