Documentation Source Text

Hex Artifact Content
Login

Artifact b2b00ddeb078970d76aa682d94227e02070cd41c:


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 0a 61 74 20 6f 66 66 73 65 74   value.at offset
1ec0: 20 31 36 20 69 73 20 30 78 30 30 20 30 78 30 31   16 is 0x00 0x01
1ed0: 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  ..This value can
1ee0: 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1ef0: 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a  as a big-endian.
1f00: 31 20 61 6e 64 20 74 68 6f 75 67 68 74 20 6f 66  1 and thought of
1f10: 20 69 73 20 61 73 20 61 20 6d 61 67 69 63 20 6e   is as a magic n
1f20: 75 6d 62 65 72 20 74 6f 20 72 65 70 72 65 73 65  umber to represe
1f30: 6e 74 20 74 68 65 20 36 35 35 33 36 20 70 61 67  nt the 65536 pag
1f40: 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e 65 20 63  e size..Or one c
1f50: 61 6e 20 76 69 65 77 20 74 68 65 20 74 77 6f 2d  an view the two-
1f60: 62 79 74 65 20 66 69 65 6c 64 20 61 73 20 61 20  byte field as a 
1f70: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75  little endian nu
1f80: 6d 62 65 72 20 61 6e 64 20 73 61 79 0a 74 68 61  mber and say.tha
1f90: 74 20 69 74 20 72 65 70 72 65 73 65 6e 74 73 20  t it represents 
1fa0: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 64 69  the page size di
1fb0: 76 69 64 65 64 20 62 79 20 32 35 36 2e 20 20 54  vided by 256.  T
1fc0: 68 65 73 65 20 74 77 6f 20 0a 69 6e 74 65 72 70  hese two .interp
1fd0: 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  retations of the
1fe0: 20 70 61 67 65 2d 73 69 7a 65 20 66 69 65 6c 64   page-size field
1ff0: 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e   are equivalent.
2000: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20  </p>..<h4>1.2.3 
2010: 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
2020: 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e  ion numbers</h4>
2030: 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f  ..<p>The file fo
2040: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
2050: 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d  on and file form
2060: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20  at read version 
2070: 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e  at offsets.18 an
2080: 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65  d 19 are intende
2090: 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65  d to allow for e
20a0: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74  nhancements of t
20b0: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69  he file format.i
20c0: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
20d0: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e  s of SQLite.  In
20e0: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
20f0: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74  s of SQLite, bot
2100: 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65  h of.these value
2110: 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c  s are 1 for roll
2120: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67  back journalling
2130: 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72   modes and 2 for
2140: 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69   [WAL].journalli
2150: 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76  ng mode.  If a v
2160: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
2170: 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75   coded to the cu
2180: 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61  rrent.file forma
2190: 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  t specification 
21a0: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74  encounters a dat
21b0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65  abase file where
21c0: 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f   the read.versio
21d0: 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20  n is 1 or 2 but 
21e0: 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f  the write versio
21f0: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  n is greater tha
2200: 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61  n 2, then the da
2210: 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74  tabase.file must
2220: 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72   be treated as r
2230: 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20  ead-only.  If a 
2240: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69  database file wi
2250: 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f  th a read versio
2260: 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32  n.greater than 2
2270: 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
2280: 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61 62   then that datab
2290: 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ase cannot be re
22a0: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f  ad or written.</
22b0: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52 65  p>..<h4>1.2.4 Re
22c0: 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65 72  served bytes per
22d0: 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53   page</h4>..<p>S
22e0: 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61 62  QLite has the ab
22f0: 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73 69  ility to set asi
2300: 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65  de a small numbe
2310: 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65 73  r of extra bytes
2320: 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65   at.the end of e
2330: 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75 73  very page for us
2340: 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e  e by extensions.
2350: 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62 79    These extra by
2360: 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f  tes are.used, fo
2370: 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68  r example, by th
2380: 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74  e SQLite Encrypt
2390: 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f  ion Extension to
23a0: 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61   store a nonce.a
23b0: 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70  nd/or cryptograp
23c0: 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73  hic checksum ass
23d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
23e0: 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22  h page.  ^The ."
23f0: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22 20  reserved space" 
2400: 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79  size in the 1-by
2410: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
2420: 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20 6e  fset 20 is the n
2430: 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f  umber.of bytes o
2440: 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  f space at the e
2450: 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  nd of each page 
2460: 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20 65  to reserve for e
2470: 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20  xtensions..This 
2480: 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79  value is usually
2490: 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63   0.  The value c
24a0: 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a  an be odd.</p>..
24b0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
24c0: 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73   usable_size {us
24d0: 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e  able size}</tcl>
24e0: 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20  .<p>The "usable 
24f0: 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62  size" of a datab
2500: 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65 20  ase page is the 
2510: 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69 66  page size specif
2520: 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20  y by the.2-byte 
2530: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
2540: 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61 64  t 16 in the head
2550: 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65 73  er less the "res
2560: 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69 7a  erved" space siz
2570: 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68  e.recorded in th
2580: 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72  e 1-byte integer
2590: 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e   at offset 20 in
25a0: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
25b0: 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66  e usable.size of
25c0: 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62 65   a page might be
25d0: 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20   an odd number. 
25e0: 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20   ^(However, the 
25f0: 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e  usable size is n
2600: 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ot.allowed to be
2610: 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20   less than 480. 
2620: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2630: 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69 7a   if the page siz
2640: 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74  e is 512,.then t
2650: 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63  he reserved spac
2660: 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78  e size cannot ex
2670: 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a  ceed 32.)^</p>..
2680: 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f 61  <h4>1.2.5 Payloa
2690: 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34 3e  d fractions</h4>
26a0: 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
26b0: 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65 6d  m and minimum em
26c0: 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66  bedded payload f
26d0: 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68 65  ractions and the
26e0: 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66 72   leaf.payload fr
26f0: 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d 75  action values mu
2700: 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61 6e  st be 64, 32, an
2710: 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61 6c  d 32.  These val
2720: 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e 61  ues were.origina
2730: 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  lly intended to 
2740: 62 65 20 74 75 6e 61 62 6c 65 20 70 61 72 61 6d  be tunable param
2750: 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c 64  eters that could
2760: 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64 69   be used to.modi
2770: 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20 66  fy the storage f
2780: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d 74  ormat of the b-t
2790: 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20  ree algorithm.  
27a0: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66 75  However, that.fu
27b0: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 6e  nctionality is n
27c0: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e 64  ot supported and
27d0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63 75   there are no cu
27e0: 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20 61  rrent plans to a
27f0: 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74 68  dd.support in th
2800: 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63 65  e future.  Hence
2810: 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62 79  , these three by
2820: 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61 74  tes are fixed at
2830: 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65 63   the.values spec
2840: 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  ified.</p>..<h4>
2850: 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e 67  1.2.6 File chang
2860: 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a 0a  e counter</h4>..
2870: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2880: 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67 65   chngctr {change
2890: 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a   counter}</tcl>.
28a0: 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68 61  <p>^The file cha
28b0: 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61  nge counter is a
28c0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
28d0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66  an integer at.of
28e0: 66 73 65 74 20 32 34 20 74 68 61 74 20 69 73 20  fset 24 that is 
28f0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
2900: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
2910: 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f 63 6b  e file is unlock
2920: 65 64 0a 61 66 74 65 72 20 68 61 76 69 6e 67 20  ed.after having 
2930: 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e 0a 57  been modified..W
2940: 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  hen two or more 
2950: 70 72 6f 63 65 73 73 65 73 20 61 72 65 20 72 65  processes are re
2960: 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64  ading the same d
2970: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 65 61  atabase file, ea
2980: 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61 6e 20  ch .process can 
2990: 64 65 74 65 63 74 20 64 61 74 61 62 61 73 65 20  detect database 
29a0: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74 68  changes from oth
29b0: 65 72 20 70 72 6f 63 65 73 73 65 73 20 62 79 20  er processes by 
29c0: 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65 20  monitoring .the 
29d0: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a  change counter..
29e0: 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 6e  A process will n
29f0: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f 20  ormally want to 
2a00: 66 6c 75 73 68 20 69 74 73 20 64 61 74 61 62 61  flush its databa
2a10: 73 65 20 70 61 67 65 20 63 61 63 68 65 20 77 68  se page cache wh
2a20: 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  en.another proce
2a30: 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20  ss modified the 
2a40: 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63 65 20  database, since 
2a50: 74 68 65 20 63 61 63 68 65 20 68 61 73 20 62 65  the cache has be
2a60: 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65 20  come stale..The 
2a70: 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  file change coun
2a80: 74 65 72 20 66 61 63 69 6c 69 74 61 74 65 73 20  ter facilitates 
2a90: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  this.</p>..<p>In
2aa0: 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e 67   WAL mode, chang
2ab0: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
2ac0: 73 65 20 61 72 65 20 64 65 74 65 63 74 65 64 20  se are detected 
2ad0: 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d 69 6e  using the wal-in
2ae0: 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65 20 63  dex.and so the c
2af0: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2b00: 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 48 65   not needed.  He
2b10: 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67 65 20  nce, the change 
2b20: 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e 6f  counter might.no
2b30: 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  t be incremented
2b40: 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73 61 63   on each transac
2b50: 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64 65  tion in WAL mode
2b60: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 37  .</p>..<h4>1.2.7
2b70: 20 49 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   In-header datab
2b80: 61 73 65 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a 3c  ase size</h4>..<
2b90: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2ba0: 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d 68 65 61  filesize {in-hea
2bb0: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2bc0: 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  e}</tcl>.<p>^The
2bd0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
2be0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
2bf0: 66 73 65 74 20 32 38 20 69 6e 74 6f 20 74 68 65  fset 28 into the
2c00: 20 68 65 61 64 65 72 20 0a 73 74 6f 72 65 73 20   header .stores 
2c10: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
2c20: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e  database file in
2c30: 20 70 61 67 65 73 2e 20 20 5e 49 66 20 74 68 69   pages.  ^If thi
2c40: 73 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61  s in-header.data
2c50: 73 69 7a 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  size size is not
2c60: 20 76 61 6c 69 64 20 28 73 65 65 20 74 68 65 20   valid (see the 
2c70: 6e 65 78 74 20 70 61 72 61 67 72 61 70 68 29 2c  next paragraph),
2c80: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
2c90: 73 65 20 0a 73 69 7a 65 20 69 73 20 63 6f 6d 70  se .size is comp
2ca0: 75 74 65 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a  uted by looking.
2cb0: 61 74 20 74 68 65 20 61 63 74 75 61 6c 20 73 69  at the actual si
2cc0: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
2cd0: 73 65 20 66 69 6c 65 2e 20 4f 6c 64 65 72 20 76  se file. Older v
2ce0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2cf0: 65 0a 69 67 6e 6f 72 65 64 20 74 68 65 20 69 6e  e.ignored the in
2d00: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2d10: 20 73 69 7a 65 20 61 6e 64 20 75 73 65 64 20 74   size and used t
2d20: 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20 73  he actual file s
2d30: 69 7a 65 0a 65 78 63 6c 75 73 69 76 65 6c 79 2e  ize.exclusively.
2d40: 20 20 5e 4e 65 77 65 72 20 76 65 72 73 69 6f 6e    ^Newer version
2d50: 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 20  s of SQLite use 
2d60: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2d70: 74 61 62 61 73 65 0a 73 69 7a 65 20 69 66 20 69  tabase.size if i
2d80: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 62  t is available b
2d90: 75 74 20 66 61 6c 6c 20 62 61 63 6b 20 74 6f 20  ut fall back to 
2da0: 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20  the actual file 
2db0: 73 69 7a 65 20 69 66 0a 74 68 65 20 69 6e 2d 68  size if.the in-h
2dc0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2dd0: 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64  ize is not valid
2de0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69  .</p>..<p>^The i
2df0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2e00: 65 20 73 69 7a 65 20 69 73 20 6f 6e 6c 79 20 63  e size is only c
2e10: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
2e20: 76 61 6c 69 64 20 69 66 0a 69 74 20 69 73 20 6e  valid if.it is n
2e30: 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 69 66 20 74  on-zero and if t
2e40: 68 65 20 34 2d 62 79 74 65 20 5b 63 68 61 6e 67  he 4-byte [chang
2e50: 65 20 63 6f 75 6e 74 65 72 5d 20 61 74 20 6f 66  e counter] at of
2e60: 66 73 65 74 20 32 34 0a 65 78 61 63 74 6c 79 20  fset 24.exactly 
2e70: 6d 61 74 63 68 65 73 20 74 68 65 20 34 2d 62 79  matches the 4-by
2e80: 74 65 20 5b 76 65 72 73 69 6f 6e 2d 76 61 6c 69  te [version-vali
2e90: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d 20 61 74  d-for number] at
2ea0: 20 6f 66 66 73 65 74 20 39 32 2e 0a 5e 28 54 68   offset 92..^(Th
2eb0: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2ec0: 62 61 73 65 20 73 69 7a 65 20 69 73 20 61 6c 77  base size is alw
2ed0: 61 79 73 20 76 61 6c 69 64 20 0a 77 68 65 6e 20  ays valid .when 
2ee0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2ef0: 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64 20 75 73  only modified us
2f00: 69 6e 67 20 72 65 63 65 6e 74 20 76 65 72 73 69  ing recent versi
2f10: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 28 76  ons of SQLite.(v
2f20: 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 20 61 6e  ersions 3.7.0 an
2f30: 64 20 6c 61 74 65 72 29 2e 29 5e 0a 49 66 20 61  d later).)^.If a
2f40: 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 20   legacy version 
2f50: 6f 66 20 53 51 4c 69 74 65 20 77 72 69 74 65 73  of SQLite writes
2f60: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2f70: 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e  , it will not.kn
2f80: 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ow to update the
2f90: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2fa0: 61 73 65 20 73 69 7a 65 20 61 6e 64 20 73 6f 20  ase size and so 
2fb0: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 0a 64 61  the in-header.da
2fc0: 74 61 62 61 73 65 20 73 69 7a 65 20 63 6f 75 6c  tabase size coul
2fd0: 64 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  d be incorrect. 
2fe0: 20 42 75 74 20 6c 65 67 61 63 79 20 76 65 72 73   But legacy vers
2ff0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 77  ions of SQLite.w
3000: 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65 20 74  ill also leave t
3010: 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  he version-valid
3020: 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61 74 20 6f  -for number at o
3030: 66 66 73 65 74 20 39 32 20 75 6e 63 68 61 6e 67  ffset 92 unchang
3040: 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c 20 6e 6f  ed.so it will no
3050: 74 20 6d 61 74 63 68 20 74 68 65 20 63 68 61 6e  t match the chan
3060: 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20 48 65 6e  ge-counter.  Hen
3070: 63 65 2c 20 69 6e 76 61 6c 69 64 20 69 6e 2d 68  ce, invalid in-h
3080: 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20 73  eader.database s
3090: 69 7a 65 73 20 63 61 6e 20 62 65 20 64 65 74 65  izes can be dete
30a0: 63 74 65 64 20 28 61 6e 64 20 69 67 6e 6f 72 65  cted (and ignore
30b0: 64 29 20 62 79 20 6f 62 73 65 72 76 69 6e 67 20  d) by observing 
30c0: 77 68 65 6e 0a 74 68 65 20 63 68 61 6e 67 65 2d  when.the change-
30d0: 63 6f 75 6e 74 65 72 20 64 6f 65 73 20 6e 6f 74  counter does not
30e0: 20 6d 61 74 63 68 20 74 68 65 20 76 65 72 73 69   match the versi
30f0: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
3100: 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ber.</p>..<h4>1.
3110: 32 2e 38 20 46 72 65 65 20 70 61 67 65 20 6c 69  2.8 Free page li
3120: 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e 75 73  st</h4>..<p>Unus
3130: 65 64 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ed pages in the 
3140: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 72  database file ar
3150: 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 66 72  e stored on a fr
3160: 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a 34 2d  eelist.  ^The.4-
3170: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3180: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3190: 74 20 33 32 20 73 74 6f 72 65 73 20 74 68 65 20  t 32 stores the 
31a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 0a 74  page number of.t
31b0: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
31c0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c 20 6f   the freelist, o
31d0: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72  r zero if the fr
31e0: 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74 79 2e  eelist is empty.
31f0: 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  .^The 4-byte big
3200: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3210: 61 74 20 6f 66 66 73 65 74 20 33 36 20 73 74 6f  at offset 36 sto
3220: 72 65 73 20 73 74 6f 72 65 73 20 74 68 65 20 74  res stores the t
3230: 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f 66 20  otal .number of 
3240: 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66 72 65  pages on the fre
3250: 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  elist.</p>..<h4>
3260: 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 63 6f 6f  1.2.9 Schema coo
3270: 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68  kie</h4>..<p>^Th
3280: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3290: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
32a0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
32b0: 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61 74  t offset 40.that
32c0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
32d0: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
32e0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
32f0: 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61 72  nges.  A .prepar
3300: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
3310: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
3320: 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72 73   a specific vers
3330: 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ion of the.datab
3340: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 57 68 65  ase schema.  Whe
3350: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
3360: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
3370: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73  he statement.mus
3380: 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  t be reprepared.
3390: 20 20 5e 57 68 65 6e 20 61 20 70 72 65 70 61 72    ^When 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 65 6e 73 75 72 65 20 74  okie to ensure t
33e0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  he value is the 
33f0: 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65  same as when the
3400: 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70   statement.was p
3410: 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20 74  repared and if t
3420: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
3430: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68   has changed, th
3440: 65 20 73 74 61 74 65 6d 65 6e 74 20 65 69 74 68  e statement eith
3450: 65 72 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er.automatically
3460: 20 72 65 70 72 65 70 61 72 65 73 20 61 6e 64 20   reprepares and 
3470: 72 65 72 75 6e 73 20 6f 72 20 69 74 20 61 62 6f  reruns or it abo
3480: 72 74 73 20 77 69 74 68 20 61 6e 20 5b 53 51 4c  rts with an [SQL
3490: 49 54 45 5f 53 43 48 45 4d 41 5d 20 0a 65 72 72  ITE_SCHEMA] .err
34a0: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
34b0: 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d  _fragment {schem
34c0: 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61  aformat} {schema
34d0: 20 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61   format} {schema
34e0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c   format number}<
34f0: 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 30  /tcl>.<h4>1.2.10
3500: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   Schema format n
3510: 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  umber</h4>..<p>T
3520: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
3530: 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34 2d 62   number is a 4-b
3540: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3550: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3560: 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d 61 20   44..The schema 
3570: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73  format number is
3580: 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
3590: 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65 61 64  file format read
35a0: 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72 73 69   and write.versi
35b0: 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20 6f 66  on numbers at of
35c0: 66 73 65 74 73 20 31 38 20 61 6e 64 20 31 39 20  fsets 18 and 19 
35d0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
35e0: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
35f0: 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f 20 74  mber.refers to t
3600: 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20 53 51  he high-level SQ
3610: 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72 61 74  L formatting rat
3620: 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 6f 77  her than the low
3630: 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f  -level b-tree.fo
3640: 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75 72 20  rmatting.  Four 
3650: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
3660: 6d 62 65 72 73 20 61 72 65 20 63 75 72 72 65 6e  mbers are curren
3670: 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e  tly defined:</p>
3680: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65  ..<ol>.<li value
3690: 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73 20 75  =1>Format 1 is u
36a0: 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c  nderstood by all
36b0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
36c0: 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65 72 73  ite back to.vers
36d0: 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e 0a  ion 3.0.0.</li>.
36e0: 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d  <li value=2>Form
36f0: 61 74 20 32 20 61 64 64 73 20 74 68 65 20 61 62  at 2 adds the ab
3700: 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20 77 69  ility of rows wi
3710: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 61  thin the same ta
3720: 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20 76 61  ble.to have a va
3730: 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20  rying number of 
3740: 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65  columns, in orde
3750: 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65  r to support the
3760: 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20  .[ALTER TABLE | 
3770: 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20  ALTER TABLE ... 
3780: 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63  ADD COLUMN] func
3790: 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75 70 70  tionality.  Supp
37a0: 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e 67 20  ort for.reading 
37b0: 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f 72 6d  and writing form
37c0: 61 74 20 32 20 77 61 73 20 61 64 64 65 64 20 69  at 2 was added i
37d0: 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  n SQLite version
37e0: 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30 35 2d   3.1.3 .on 2005-
37f0: 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20  02-19.</li>.<li 
3800: 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33  value=3>Format 3
3810: 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69 74   adds the abilit
3820: 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c 75 6d  y of extra colum
3830: 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41 4c 54  ns added by.[ALT
3840: 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52  ER TABLE | ALTER
3850: 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43   TABLE ... ADD C
3860: 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e  OLUMN] to have n
3870: 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a  on-NULL default.
3880: 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20 63 61  values.  This ca
3890: 70 61 62 69 6c 69 74 79 20 77 61 73 20 61 64 64  pability was add
38a0: 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ed in SQLite ver
38b0: 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e 20 32  sion 3.1.4 .on 2
38c0: 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69 3e 0a  005-03-11.</li>.
38d0: 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46 6f 72  <li value=4>^For
38e0: 6d 61 74 20 34 20 63 61 75 73 65 73 20 53 51 4c  mat 4 causes SQL
38f0: 69 74 65 20 74 6f 20 72 65 73 70 65 63 74 20 74  ite to respect t
3900: 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e 67 20 69  he.[descending i
3910: 6e 64 65 78 65 73 20 7c 20 44 45 53 43 20 6b 65  ndexes | DESC ke
3920: 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65 78 20  yword] on.index 
3930: 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20 28  declarations.  (
3940: 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72  ^The DESC keywor
3950: 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20  d is ignored in 
3960: 69 6e 64 65 78 65 73 20 66 6f 72 20 0a 66 6f 72  indexes for .for
3970: 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64 20 33  mats 1, 2, and 3
3980: 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61 6c 73  .).^Format 4 als
3990: 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77 20 62  o adds two new b
39a0: 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20 74 79  oolean record ty
39b0: 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65 72 69  pe values ([seri
39c0: 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e 64 20  al types].8 and 
39d0: 39 29 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72  9).  Support for
39e0: 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20 61 64   format 4 was ad
39f0: 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 33 2e  ded in SQLite 3.
3a00: 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31  3.0 on.2006-01-1
3a10: 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c  0.</li>.</ol>..<
3a20: 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73 65 20  p>^New database 
3a30: 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62 79  files created by
3a40: 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f 72 6d   SQLite use form
3a50: 61 74 20 34 20 62 79 20 64 65 66 61 75 6c 74 2e  at 4 by default.
3a60: 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69  .^The [legacy_fi
3a70: 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61  le_format pragma
3a80: 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ] can be used to
3a90: 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a 74 6f   cause SQLite.to
3aa0: 20 63 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   create new data
3ab0: 62 61 73 65 20 66 69 6c 65 73 20 75 73 69 6e 67  base files using
3ac0: 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68 65 20 66   format 1..The f
3ad0: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75  ormat version nu
3ae0: 6d 62 65 72 20 63 61 6e 20 62 65 20 6d 61 64 65  mber can be made
3af0: 20 74 6f 20 64 65 66 61 75 6c 74 20 74 6f 20 31   to default to 1
3b00: 20 69 6e 73 74 65 61 64 20 6f 66 20 34 20 62 79   instead of 4 by
3b10: 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c 49 54 45  .setting [SQLITE
3b20: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3b30: 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f 6d 70 69  RMAT]=1 at compi
3b40: 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le-time..</p>..<
3b50: 68 34 3e 31 2e 32 2e 31 31 20 53 75 67 67 65 73  h4>1.2.11 Sugges
3b60: 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 3c 2f  ted cache size</
3b70: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79  h4>..<p>The 4-by
3b80: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 69  te big-endian si
3b90: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74 20  gned integer at 
3ba0: 6f 66 66 73 65 74 20 34 38 20 69 73 20 74 68 65  offset 48 is the
3bb0: 20 73 75 67 67 65 73 74 65 64 0a 63 61 63 68 65   suggested.cache
3bc0: 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73 20 66   size in pages f
3bd0: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
3be0: 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c 75 65  file.  The value
3bf0: 20 69 73 20 61 20 73 75 67 67 65 73 74 69 6f 6e   is a suggestion
3c00: 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74 65  .only and SQLite
3c10: 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c   is under no obl
3c20: 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72  igation to honor
3c30: 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f 6c 75   it.  The absolu
3c40: 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68 65 20  te value.of the 
3c50: 69 6e 74 65 67 65 72 20 69 73 20 75 73 65 64 20  integer is used 
3c60: 61 73 20 74 68 65 20 73 75 67 67 65 73 74 65 64  as the suggested
3c70: 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75 67 67   size.  The sugg
3c80: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3c90: 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73 69 6e  .can be set usin
3ca0: 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74 5f 63  g the [default_c
3cb0: 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  ache_size pragma
3cc0: 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  ].</p>..<h4>1.2.
3cd0: 31 32 20 49 6e 63 72 65 6d 65 6e 74 61 6c 20 76  12 Incremental v
3ce0: 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73 3c 2f  acuum settings</
3cf0: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 20  h4>..<p>The two 
3d00: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3d10: 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20 6f 66  n integers at of
3d20: 66 73 65 74 73 20 35 32 20 61 6e 64 20 36 34 20  fsets 52 and 64 
3d30: 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61 6e 61  are used.to mana
3d40: 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63  ge the [auto_vac
3d50: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
3d60: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
3d70: 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e  des.  ^If.the in
3d80: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3d90: 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 20  52 is zero then 
3da0: 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70 74 72  pointer-map (ptr
3db0: 6d 61 70 29 20 70 61 67 65 73 20 61 72 65 0a 6f  map) pages are.o
3dc0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
3dd0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
3de0: 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f 5f 76  d neither auto_v
3df0: 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d  acuum nor.increm
3e00: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 72 65  ental_vacuum are
3e10: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e 49 66   supported.  ^If
3e20: 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
3e30: 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e  offset 52 is.non
3e40: 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20 69 73  -zero then it is
3e50: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
3e60: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
3e70: 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
3e80: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20  .database file, 
3e90: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3ea0: 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 70  e will contain p
3eb0: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3ec0: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3ed0: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3ee0: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
3ef0: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e  tal_vacuum.  ^In
3f00: 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73   this latter.cas
3f10: 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  e, the integer a
3f20: 74 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74  t offset 64 is t
3f30: 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e  rue for incremen
3f40: 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66  tal_vacuum and.f
3f50: 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61  alse for auto_va
3f60: 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65 20 69  cuum.  ^If the i
3f70: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3f80: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
3f90: 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20  .the integer at 
3fa0: 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74 20 61  offset 64 must a
3fb0: 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e  lso be zero.</p>
3fc0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
3fd0: 6e 74 20 65 6e 63 20 7b 74 65 78 74 20 65 6e 63  nt enc {text enc
3fe0: 6f 64 69 6e 67 7d 3c 2f 74 63 6c 3e 0a 3c 68 34  oding}</tcl>.<h4
3ff0: 3e 31 2e 32 2e 31 33 20 54 65 78 74 20 65 6e 63  >1.2.13 Text enc
4000: 6f 64 69 6e 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e  oding</h4>..<p>^
4010: 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65  The 4-byte big-e
4020: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
4030: 20 6f 66 66 73 65 74 20 35 36 20 64 65 74 65 72   offset 56 deter
4040: 6d 69 6e 65 73 20 74 68 65 20 65 6e 63 6f 64 69  mines the encodi
4050: 6e 67 0a 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  ng.used for all 
4060: 74 65 78 74 20 73 74 72 69 6e 67 73 20 73 74 6f  text strings sto
4070: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
4080: 61 73 65 2e 20 20 0a 5e 41 20 76 61 6c 75 65 20  ase.  .^A value 
4090: 6f 66 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38  of 1 means UTF-8
40a0: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20  ..^A value of 2 
40b0: 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 0a  means UTF-16le..
40c0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65  ^A value of 3 me
40d0: 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f  ans UTF-16be..No
40e0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72   other values ar
40f0: 65 20 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54 68 65  e allowed..^(The
4100: 20 73 71 6c 69 74 65 33 2e 68 20 68 65 61 64 65   sqlite3.h heade
4110: 72 20 66 69 6c 65 20 64 65 66 69 6e 65 73 20 43  r file defines C
4120: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
4130: 63 72 6f 73 20 53 51 4c 49 54 45 5f 55 54 46 38  cros SQLITE_UTF8
4140: 20 61 73 20 31 2c 0a 53 51 4c 49 54 45 5f 55 54   as 1,.SQLITE_UT
4150: 46 31 36 4c 45 20 61 73 20 32 2c 20 61 6e 64 20  F16LE as 2, and 
4160: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 61  SQLITE_UTF16BE a
4170: 73 20 33 2c 20 74 6f 20 75 73 65 20 69 6e 20 70  s 3, to use in p
4180: 6c 61 63 65 20 6f 66 0a 74 68 65 20 6e 75 6d 65  lace of.the nume
4190: 72 69 63 20 63 6f 64 65 73 20 66 6f 72 20 74 68  ric codes for th
41a0: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
41b0: 29 5e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  )^</p>..<h4>1.2.
41c0: 31 34 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20  14 User version 
41d0: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
41e0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
41f0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
4200: 74 20 6f 66 66 73 65 74 20 36 30 20 69 73 20 74  t offset 60 is t
4210: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
4220: 77 68 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64  which.is set and
4230: 20 71 75 65 72 69 65 64 20 62 79 20 74 68 65 20   queried by the 
4240: 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72  [user_version pr
4250: 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72  agma].  The user
4260: 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20   version is.not 
4270: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c  used by SQLite.<
4280: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4290: 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41 70 70  gment appid {App
42a0: 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63  lication ID}</tc
42b0: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20 41 70  l>.<h4>1.2.15 Ap
42c0: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 34  plication ID</h4
42d0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
42e0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
42f0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
4300: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4310: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
4320: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
4330: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
4340: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
4350: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
4360: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
4370: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
4380: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4390: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
43a0: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
43b0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
43c0: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
43d0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
43e0: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
43f0: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
4400: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4410: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
4420: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
4430: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
4440: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
4450: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
4460: 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65 72  ile(1)] to deter
4470: 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69  mine the specifi
4480: 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74 68  c.file type rath
4490: 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65 70  er than just rep
44a0: 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33 20  orting "SQLite3 
44b0: 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c 69  Database".  A li
44c0: 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20 61  st of.assigned a
44d0: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63  pplication IDs c
44e0: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
44f0: 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74  nsulting the.[ht
4500: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
4510: 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74  org/src/artifact
4520: 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61  ?ci=trunk&filena
4530: 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67  me=magic.txt|mag
4540: 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20  ic.txt].file in 
4550: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
4560: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70  e repository.</p
4570: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4580: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
4590: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
45a0: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
45b0: 34 3e 31 2e 32 2e 31 36 20 57 72 69 74 65 20 6c  4>1.2.16 Write l
45c0: 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e  ibrary version n
45d0: 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f  umber and versio
45e0: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
45f0: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h4>..<p>^The
4600: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4610: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4620: 66 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74  fset 96 stores t
4630: 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53  he .[SQLITE_VERS
4640: 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75  ION_NUMBER] valu
4650: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  e for the SQLite
4660: 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f   library that mo
4670: 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69  st.recently modi
4680: 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73  fied the databas
4690: 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d  e file.  ^The 4-
46a0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
46b0: 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65  integer at.offse
46c0: 74 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75  t 92 is the valu
46d0: 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65  e of the [change
46e0: 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74   counter] when t
46f0: 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  he version numbe
4700: 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54  r.was stored.  T
4710: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
4720: 66 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65  fset 92 indicate
4730: 73 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74  s which transact
4740: 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20  ion.the version 
4750: 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20  number is valid 
4760: 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74  for and is somet
4770: 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a  imes called the.
4780: 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  "version-valid-f
4790: 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34  or number"...<h4
47a0: 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73  >1.2.16 Header s
47b0: 70 61 63 65 20 72 65 73 65 72 76 65 64 20 66 6f  pace reserved fo
47c0: 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e  r expansion</h4>
47d0: 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62  ..<p>All other b
47e0: 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ytes of the data
47f0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
4800: 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f   are reserved fo
4810: 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73 69  r.future expansi
4820: 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73  on and must be s
4830: 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a  et to zero.</p>.
4840: 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63  .<h3>1.3 The Loc
4850: 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e  k-Byte Page</h3>
4860: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
4870: 74 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73  te page is the s
4880: 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68  ingle page of th
4890: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
48a0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
48b0: 65 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  e bytes at offse
48c0: 74 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37  ts between 10737
48d0: 34 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34  41824 and 107374
48e0: 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e  2335,.inclusive.
48f0: 20 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c    A database fil
4900: 65 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74  e that is less t
4910: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
4920: 31 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73  1073741824 bytes
4930: 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69   .in size contai
4940: 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20  ns no lock-byte 
4950: 70 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73  page.  A databas
4960: 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68  e file larger th
4970: 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f  an.1073741824 co
4980: 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f  ntains exactly o
4990: 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  ne lock-byte pag
49a0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  e..</p>..<p>The 
49b0: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
49c0: 73 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20  s set aside for 
49d0: 75 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61  use by the opera
49e0: 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63  ting-system spec
49f0: 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65  ific.[VFS] imple
4a00: 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70  mentation in imp
4a10: 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61  lementing the da
4a20: 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b  tabase file lock
4a30: 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a  ing primitives..
4a40: 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74  ^SQLite does not
4a50: 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79   use the lock-by
4a60: 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53  te page.  ^The S
4a70: 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c  QLite core .will
4a80: 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77   never read or w
4a90: 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79  rite the lock-by
4aa0: 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20  te page,.though 
4ab0: 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d  operating-system
4ac0: 20 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20   specific [VFS] 
4ad0: 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73  .implementations
4ae0: 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72   may choose to r
4af0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74  ead or write byt
4b00: 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62  es on the lock-b
4b10: 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64  yte .page accord
4b20: 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64  ing to the .need
4b30: 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69  s and procliviti
4b40: 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c  es of the underl
4b50: 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68  ying system.  Th
4b60: 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32  e unix and win32
4b70: 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74  .[VFS] implement
4b80: 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65  ations that come
4b90: 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69   built into SQLi
4ba0: 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20  te do not write 
4bb0: 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65  to the.lock-byte
4bc0: 20 70 61 67 65 2c 20 62 75 74 20 74 68 69 72 64   page, but third
4bd0: 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65  -party VFS imple
4be0: 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f  mentations for.o
4bf0: 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73  ther operating s
4c00: 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70  ystems might.</p
4c10: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4c20: 65 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b  ent {freelist} {
4c30: 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d  freelist} {free-
4c40: 70 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e  page list}</tcl>
4c50: 0a 3c 68 33 3e 31 2e 34 20 54 68 65 20 46 72 65  .<h3>1.4 The Fre
4c60: 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  elist</h3>..<p>A
4c70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
4c80: 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65  ight contain one
4c90: 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74   or more pages t
4ca0: 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61  hat are not in.a
4cb0: 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73  ctive use.  Unus
4cc0: 65 64 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d  ed pages can com
4cd0: 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61  e about, for exa
4ce0: 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72  mple, when infor
4cf0: 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65  mation.is delete
4d00: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
4d10: 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  ase.  Unused pag
4d20: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  es are stored on
4d30: 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e   the freelist.an
4d40: 64 20 61 72 65 20 72 65 75 73 65 64 20 77 68 65  d are reused whe
4d50: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67  n additional pag
4d60: 65 73 20 61 72 65 20 72 65 71 75 69 72 65 64 2e  es are required.
4d70: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65  </p>..<p>The fre
4d80: 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a  elist is organiz
4d90: 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c  ed as a linked l
4da0: 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20  ist of freelist 
4db0: 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68  trunk pages.with
4dc0: 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65   each trunk page
4dd0: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67  s containing pag
4de0: 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65  e numbers for ze
4df0: 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c  ro or more freel
4e00: 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c  ist.leaf pages.<
4e10: 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69  /p>..<p>A freeli
4e20: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f  st trunk page co
4e30: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
4e40: 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67  ay of 4-byte big
4e50: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73  -endian integers
4e60: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
4e70: 65 20 61 72 72 61 79 20 69 73 20 61 73 20 6d 61  e array is as ma
4e80: 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73 20 77  ny integers as w
4e90: 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75  ill fit in the u
4ea0: 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61  sable space.of a
4eb0: 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69   page.  The mini
4ec0: 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65  mum usable space
4ed0: 20 69 73 20 34 38 30 20 62 79 74 65 73 20 73 6f   is 480 bytes so
4ee0: 20 74 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20   the array will 
4ef0: 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61  always.be at lea
4f00: 73 74 20 31 32 30 20 65 6e 74 72 69 65 73 20 69  st 120 entries i
4f10: 6e 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20  n length.  ^The 
4f20: 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 6f 6e  first integer on
4f30: 20 61 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e   a freelist trun
4f40: 6b 0a 70 61 67 65 20 69 73 20 74 68 65 20 70 61  k.page is the pa
4f50: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
4f60: 20 6e 65 78 74 20 66 72 65 65 6c 69 73 74 20 74   next freelist t
4f70: 72 75 6e 6b 20 70 61 67 65 20 69 6e 20 74 68 65  runk page in the
4f80: 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f 20 0a 69   list or zero .i
4f90: 66 20 74 68 69 73 20 69 73 20 74 68 65 20 6c 61  f this is the la
4fa0: 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  st freelist trun
4fb0: 6b 20 70 61 67 65 2e 20 20 5e 54 68 65 20 73 65  k page.  ^The se
4fc0: 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 6f 6e 20  cond integer on 
4fd0: 61 20 66 72 65 65 6c 69 73 74 0a 74 72 75 6e 6b  a freelist.trunk
4fe0: 20 70 61 67 65 20 69 73 20 74 68 65 20 6e 75 6d   page is the num
4ff0: 62 65 72 20 6f 66 20 6c 65 61 66 20 70 61 67 65  ber of leaf page
5000: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c   pointers to fol
5010: 6c 6f 77 2e 20 20 0a 5e 28 43 61 6c 6c 20 74 68  low.  .^(Call th
5020: 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72  e second integer
5030: 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 20 74   on a freelist t
5040: 72 75 6e 6b 20 70 61 67 65 20 4c 2e 0a 49 66 20  runk page L..If 
5050: 4c 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  L is greater tha
5060: 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74 65  n zero then inte
5070: 67 65 72 73 20 77 69 74 68 20 61 72 72 61 79 20  gers with array 
5080: 69 6e 64 65 78 65 73 20 62 65 74 77 65 65 6e 20  indexes between 
5090: 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73  2 and.L+1 inclus
50a0: 69 76 65 20 63 6f 6e 74 61 69 6e 20 70 61 67 65  ive contain page
50b0: 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 66 72 65   numbers for fre
50c0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
50d0: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65  .)^</p>..<p>Free
50e0: 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20  list leaf pages 
50f0: 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72  contain no infor
5100: 6d 61 74 69 6f 6e 2e 20 20 5e 53 51 4c 69 74 65  mation.  ^SQLite
5110: 20 61 76 6f 69 64 73 20 72 65 61 64 69 6e 67 20   avoids reading 
5120: 6f 72 0a 77 72 69 74 69 6e 67 20 66 72 65 65 6c  or.writing freel
5130: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 69  ist leaf pages i
5140: 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64 75 63  n order to reduc
5150: 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a  e disk I/O.</p>.
5160: 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20 53 51 4c  .<p>A bug in SQL
5170: 69 74 65 20 76 65 72 73 69 6f 6e 73 20 70 72 69  ite versions pri
5180: 6f 72 20 74 6f 20 33 2e 36 2e 30 20 63 61 75 73  or to 3.6.0 caus
5190: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
51a0: 74 6f 20 62 65 0a 72 65 70 6f 72 74 65 64 20 61  to be.reported a
51b0: 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79  s corrupt if any
51c0: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 36 20 65   of the last 6 e
51d0: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 66 72  ntries in the fr
51e0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
51f0: 65 20 0a 61 72 72 61 79 20 63 6f 6e 74 61 69 6e  e .array contain
5200: 65 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75  ed non-zero valu
5210: 65 73 2e 20 20 4e 65 77 65 72 20 76 65 72 73 69  es.  Newer versi
5220: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 64 6f  ons of SQLite do
5230: 20 6e 6f 74 20 68 61 76 65 0a 74 68 69 73 20 70   not have.this p
5240: 72 6f 62 6c 65 6d 2e 20 20 5e 48 6f 77 65 76 65  roblem.  ^Howeve
5250: 72 2c 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e  r, newer version
5260: 73 20 6f 66 20 53 51 4c 69 74 65 20 73 74 69 6c  s of SQLite stil
5270: 6c 20 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68  l avoid using th
5280: 65 20 0a 6c 61 73 74 20 73 69 78 20 65 6e 74 72  e .last six entr
5290: 69 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c  ies in the freel
52a0: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 61  ist trunk page a
52b0: 72 72 61 79 20 69 6e 20 6f 72 64 65 72 20 74 68  rray in order th
52c0: 61 74 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  at database.file
52d0: 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77  s created by new
52e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
52f0: 51 4c 69 74 65 20 63 61 6e 20 62 65 20 72 65 61  QLite can be rea
5300: 64 20 62 79 20 6f 6c 64 65 72 20 76 65 72 73 69  d by older versi
5310: 6f 6e 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ons.of SQLite.</
5320: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  p>..<p>^The numb
5330: 65 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70  er of freelist p
5340: 61 67 65 73 20 69 73 20 73 74 6f 72 65 64 20 61  ages is stored a
5350: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
5360: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e  ndian integer.in
5370: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
5380: 61 64 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65  ader at an offse
5390: 74 20 6f 66 20 33 36 20 66 72 6f 6d 20 74 68 65  t of 36 from the
53a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
53b0: 65 20 66 69 6c 65 2e 0a 5e 54 68 65 20 64 61 74  e file..^The dat
53c0: 61 62 61 73 65 20 68 65 61 64 65 72 20 61 6c 73  abase header als
53d0: 6f 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  o stores the pag
53e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
53f0: 66 69 72 73 74 20 66 72 65 65 6c 69 73 74 20 74  first freelist t
5400: 72 75 6e 6b 0a 70 61 67 65 20 61 73 20 61 20 34  runk.page as a 4
5410: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
5420: 20 69 6e 74 65 67 65 72 20 61 74 20 61 6e 20 6f   integer at an o
5430: 66 66 73 65 74 20 6f 66 20 33 32 20 66 72 6f 6d  ffset of 32 from
5440: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f   the beginning.o
5450: 66 20 74 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  f the file.</p>.
5460: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
5470: 74 20 62 74 72 65 65 20 7b 42 2a 2d 54 72 65 65  t btree {B*-Tree
5480: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 35  s}</tcl>.<h3>1.5
5490: 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68   B-tree Pages</h
54a0: 33 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65  3>..<p>The b-tre
54b0: 65 20 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76  e algorithm prov
54c0: 69 64 65 73 20 6b 65 79 2f 64 61 74 61 20 73 74  ides key/data st
54d0: 6f 72 61 67 65 20 77 69 74 68 20 75 6e 69 71 75  orage with uniqu
54e0: 65 20 61 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65  e and.ordered ke
54f0: 79 73 20 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e  ys on page-orien
5500: 74 65 64 20 73 74 6f 72 61 67 65 20 64 65 76 69  ted storage devi
5510: 63 65 73 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f  ces..For backgro
5520: 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
5530: 6f 6e 20 62 2d 74 72 65 65 73 2c 20 73 65 65 0a  on b-trees, see.
5540: 4b 6e 75 74 68 2c 20 3c 75 3e 54 68 65 20 41 72  Knuth, <u>The Ar
5550: 74 20 4f 66 20 43 6f 6d 70 75 74 65 72 20 50 72  t Of Computer Pr
5560: 6f 67 72 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56  ogramming</u>, V
5570: 6f 6c 75 6d 65 20 33 20 22 53 6f 72 74 69 6e 67  olume 3 "Sorting
5580: 0a 61 6e 64 20 53 65 61 72 63 68 69 6e 67 22 2c  .and Searching",
5590: 20 70 61 67 65 73 20 34 37 31 2d 34 37 39 2e 20   pages 471-479. 
55a0: 20 54 77 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d   Two kinds of b-
55b0: 74 72 65 65 73 20 61 72 65 20 75 73 65 64 20 62  trees are used b
55c0: 79 0a 53 51 4c 69 74 65 2e 20 20 54 68 65 20 61  y.SQLite.  The a
55d0: 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e  lgorithm that Kn
55e0: 75 74 68 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72  uth calls "B*-Tr
55f0: 65 65 22 20 73 74 6f 72 65 73 20 61 6c 6c 20 64  ee" stores all d
5600: 61 74 61 0a 69 6e 20 74 68 65 20 6c 65 61 76 65  ata.in the leave
5610: 73 20 6f 66 20 74 68 65 20 74 72 65 65 2e 20 20  s of the tree.  
5620: 53 51 4c 69 74 65 20 63 61 6c 6c 73 20 74 68 69  SQLite calls thi
5630: 73 20 76 61 72 69 65 74 79 20 6f 66 20 62 2d 74  s variety of b-t
5640: 72 65 65 0a 61 20 22 74 61 62 6c 65 20 62 2d 74  ree.a "table b-t
5650: 72 65 65 22 2e 20 54 68 65 20 61 6c 67 6f 72 69  ree". The algori
5660: 74 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63  thm that Knuth c
5670: 61 6c 6c 73 20 73 69 6d 70 6c 79 20 22 42 2d 54  alls simply "B-T
5680: 72 65 65 22 0a 73 74 6f 72 65 73 20 62 6f 74 68  ree".stores both
5690: 20 74 68 65 20 6b 65 79 20 61 6e 64 20 74 68 65   the key and the
56a0: 20 64 61 74 61 20 74 6f 67 65 74 68 65 72 20 69   data together i
56b0: 6e 20 62 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e  n both leaves.an
56c0: 64 20 69 6e 20 69 6e 74 65 72 69 6f 72 20 70 61  d in interior pa
56d0: 67 65 73 2e 20 20 49 6e 20 74 68 65 20 53 51 4c  ges.  In the SQL
56e0: 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ite implementati
56f0: 6f 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  on, the original
5700: 0a 42 2d 54 72 65 65 20 61 6c 67 6f 72 69 74 68  .B-Tree algorith
5710: 6d 20 73 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e  m stores keys on
5720: 6c 79 2c 20 6f 6d 69 74 74 69 6e 67 20 74 68 65  ly, omitting the
5730: 20 64 61 74 61 20 65 6e 74 69 72 65 6c 79 2c 20   data entirely, 
5740: 61 6e 64 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e  and.is called an
5750: 20 22 69 6e 64 65 78 20 62 2d 74 72 65 65 22 2e   "index b-tree".
5760: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
5770: 67 65 20 69 73 20 65 69 74 68 65 72 20 61 6e 20  ge is either an 
5780: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20 6f 72  interior page or
5790: 20 61 20 6c 65 61 66 20 70 61 67 65 2e 0a 41 20   a leaf page..A 
57a0: 6c 65 61 66 20 70 61 67 65 20 63 6f 6e 74 61 69  leaf page contai
57b0: 6e 73 20 6b 65 79 73 20 61 6e 64 20 69 6e 20 74  ns keys and in t
57c0: 68 65 20 63 61 73 65 20 6f 66 20 61 20 74 61 62  he case of a tab
57d0: 6c 65 20 62 2d 74 72 65 65 20 65 61 63 68 0a 6b  le b-tree each.k
57e0: 65 79 20 68 61 73 20 61 73 73 6f 63 69 61 74 65  ey has associate
57f0: 64 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 74 65  d data.  An inte
5800: 72 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69  rior page contai
5810: 6e 73 0a 4b 20 6b 65 79 73 20 74 6f 67 65 74 68  ns.K keys togeth
5820: 65 72 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e  er with K+1 poin
5830: 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d  ters to child b-
5840: 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70  tree pages..A "p
5850: 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e  ointer" in an in
5860: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5870: 67 65 20 69 73 20 6a 75 73 74 20 74 68 65 20 33  ge is just the 3
5880: 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61  1-bit integer.pa
5890: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
58a0: 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e   child page.</p>
58b0: 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20  ..<p>Define the 
58c0: 64 65 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20  depth.of a leaf 
58d0: 62 2d 74 72 65 65 20 74 6f 20 62 65 20 31 20 61  b-tree to be 1 a
58e0: 6e 64 20 74 68 65 20 64 65 70 74 68 20 6f 66 20  nd the depth of 
58f0: 61 6e 79 20 69 6e 74 65 72 69 6f 72 20 62 2d 74  any interior b-t
5900: 72 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f  ree to be one.mo
5910: 72 65 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69  re than the maxi
5920: 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 61 6e 79  mum depth of any
5930: 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e   of its children
5940: 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  .  ^In a well-fo
5950: 72 6d 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61  rmed.database, a
5960: 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61  ll children of a
5970: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
5980: 65 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  e have the same 
5990: 64 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  depth.</p>..<p>I
59a0: 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  n an interior b-
59b0: 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 20 70  tree page, the p
59c0: 6f 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73  ointers and keys
59d0: 20 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72   logically alter
59e0: 6e 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69  nate .with a poi
59f0: 6e 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64  nter on both end
5a00: 73 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75 73  s. (The previous
5a10: 20 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20   sentence is to 
5a20: 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f  be understood.co
5a30: 6e 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65  nceptually - the
5a40: 20 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f   actual layout o
5a50: 66 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70  f the keys and.p
5a60: 6f 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74  ointers within t
5a70: 68 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20  he page is more 
5a80: 63 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20  complicated and 
5a90: 77 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65  will be describe
5aa0: 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e  d in.the sequel.
5ab0: 29 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68  )  All keys with
5ac0: 69 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  in the same page
5ad0: 20 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20   are unique and 
5ae0: 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72  are logically.or
5af0: 67 61 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e  ganized in ascen
5b00: 64 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20  ding order from 
5b10: 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20  left to right.  
5b20: 28 41 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64  (Again, this ord
5b30: 65 72 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c  ering.is logical
5b40: 2c 20 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20  , not physical. 
5b50: 20 54 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61   The actual loca
5b60: 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74  tion of keys wit
5b70: 68 69 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20  hin the page.is 
5b80: 61 72 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72  arbitrary.) ^For
5b90: 20 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e   any key X, poin
5ba0: 74 65 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74  ters to the left
5bb0: 0a 6f 66 20 61 20 58 20 72 65 66 65 72 20 74 6f  .of a X refer to
5bc0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e   b-tree pages on
5bd0: 20 77 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20   which all keys 
5be0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  are less than or
5bf0: 20 65 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f   equal to X..^Po
5c00: 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20 72 69  inters to the ri
5c10: 67 68 74 20 6f 66 20 58 20 72 65 66 65 72 20 74  ght of X refer t
5c20: 6f 20 70 61 67 65 73 20 77 68 65 72 65 20 61 6c  o pages where al
5c30: 6c 20 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61  l keys are .grea
5c40: 74 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a  ter than X.</p>.
5c50: 0a 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e  .<p>Within an in
5c60: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5c70: 67 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64  ge, each key and
5c80: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
5c90: 69 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65  its.immediate le
5ca0: 66 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  ft are combined 
5cb0: 69 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72 65  into a structure
5cc0: 20 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22   called a "cell"
5cd0: 2e 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73  .  The.right-mos
5ce0: 74 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c  t pointer is hel
5cf0: 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41  d separately.  A
5d00: 20 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61 67   leaf b-tree pag
5d10: 65 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72  e has no.pointer
5d20: 73 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20  s, but it still 
5d30: 75 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74  uses the cell st
5d40: 72 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20  ructure to hold 
5d50: 6b 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62  keys for.index b
5d60: 2d 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61  -trees or keys a
5d70: 6e 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74  nd content for t
5d80: 61 62 6c 65 20 62 2d 74 72 65 65 73 2e 20 20 44  able b-trees.  D
5d90: 61 74 61 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74  ata is also.cont
5da0: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 65 6c  ained in the cel
5db0: 6c 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72  l..</p>..<p>Ever
5dc0: 79 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61  y b-tree page ha
5dd0: 73 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61  s at most one pa
5de0: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
5df0: 2e 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  ..A b-tree page 
5e00: 77 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74  without a parent
5e10: 20 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f   is called a roo
5e20: 74 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20  t page.  A root 
5e30: 62 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65  b-tree page.toge
5e40: 74 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c  ther with the cl
5e50: 6f 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69  osure of its chi
5e60: 6c 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d  ldren form a com
5e70: 70 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74  plete b-tree..It
5e80: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e   is possible (an
5e90: 64 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72  d in fact rather
5ea0: 20 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65   common) to have
5eb0: 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a complete b-tr
5ec0: 65 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73  ee.that consists
5ed0: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
5ee0: 65 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61  e that is both a
5ef0: 20 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f   leaf and the ro
5f00: 6f 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72  ot..Because ther
5f10: 65 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66  e are pointers f
5f20: 72 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63  rom parents to c
5f30: 68 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70  hildren, every p
5f40: 61 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74  age of a.complet
5f50: 65 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20  e b-tree can be 
5f60: 6c 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20  located if only 
5f70: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  the root page is
5f80: 20 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a   known.  Hence,.
5f90: 62 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e  b-trees are iden
5fa0: 74 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20  tified by their 
5fb0: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
5fc0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72  .</p>..<p>A b-tr
5fd0: 65 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65  ee page is eithe
5fe0: 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  r a table b-tree
5ff0: 20 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65   page or an inde
6000: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  x b-tree page..A
6010: 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20  ll pages within 
6020: 65 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d  each complete b-
6030: 74 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20  tree are of the 
6040: 73 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65  same type: eithe
6050: 72 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78  r table.or index
6060: 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 6f 6e  .  There is a on
6070: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  e table b-trees 
6080: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
6090: 66 69 6c 65 0a 66 6f 72 20 65 61 63 68 20 72 6f  file.for each ro
60a0: 77 69 64 20 74 61 62 6c 65 20 69 6e 20 74 68 65  wid table in the
60b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
60c0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74  , including syst
60d0: 65 6d 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61  em tables.such a
60e0: 73 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  s sqlite_master.
60f0: 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20 69    There is one i
6100: 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 69 6e 20  ndex b-trees.in 
6110: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6120: 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78  e for each index
6130: 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61 2c 20   in the schema, 
6140: 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65  including implie
6150: 64 20 69 6e 64 65 78 65 73 0a 63 72 65 61 74 65  d indexes.create
6160: 64 20 62 79 20 75 6e 69 71 75 65 6e 65 73 73 20  d by uniqueness 
6170: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 54 68  constraints.  Th
6180: 65 72 65 20 61 72 65 20 6e 6f 20 62 2d 74 72 65  ere are no b-tre
6190: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
61a0: 74 68 0a 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  th.[virtual tabl
61b0: 65 73 5d 2e 20 20 53 70 65 63 69 66 69 63 20 76  es].  Specific v
61c0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
61d0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
61e0: 68 74 20 6d 61 6b 65 20 75 73 65 0a 6f 66 20 5b  ht make use.of [
61f0: 73 68 61 64 6f 77 20 74 61 62 6c 65 73 5d 20 66  shadow tables] f
6200: 6f 72 20 73 74 6f 72 61 67 65 2c 20 62 75 74 20  or storage, but 
6210: 74 68 6f 73 65 20 73 68 61 64 6f 77 20 74 61 62  those shadow tab
6220: 6c 65 73 20 77 69 6c 6c 20 68 61 76 65 20 73 65  les will have se
6230: 70 61 72 61 74 65 0a 65 6e 74 72 69 65 73 20 69  parate.entries i
6240: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
6250: 63 68 65 6d 61 2e 20 20 5b 57 49 54 48 4f 55 54  chema.  [WITHOUT
6260: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 75   ROWID] tables u
6270: 73 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73  se index b-trees
6280: 0a 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 74  .rather than a t
6290: 61 62 6c 65 20 62 2d 74 72 65 65 73 2c 20 73 6f  able b-trees, so
62a0: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 0a 69 6e   there is one.in
62b0: 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74 68  dex b-tree in th
62c0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
62d0: 66 6f 72 20 65 61 63 68 20 5b 57 49 54 48 4f 55  for each [WITHOU
62e0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a  T ROWID] table..
62f0: 54 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65  The b-tree corre
6300: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20  sponding to the 
6310: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
6320: 62 6c 65 20 69 73 20 61 6c 77 61 79 73 20 61 20  ble is always a 
6330: 74 61 62 6c 65 0a 62 2d 74 72 65 65 20 61 6e 64  table.b-tree and
6340: 20 61 6c 77 61 79 73 20 68 61 73 20 61 20 72 6f   always has a ro
6350: 6f 74 20 70 61 67 65 20 6f 66 20 31 2e 0a 54 68  ot page of 1..Th
6360: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
6370: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74  table contains t
6380: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
6390: 62 65 72 20 66 6f 72 20 65 76 65 72 79 20 6f 74  ber for every ot
63a0: 68 65 72 20 0a 74 61 62 6c 65 20 61 6e 64 20 69  her .table and i
63b0: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
63c0: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
63d0: 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  <p>Each entry in
63e0: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
63f0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 36 34  consists of a 64
6400: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
6410: 67 65 72 20 6b 65 79 0a 61 6e 64 20 75 70 20 74  ger key.and up t
6420: 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79 74  o 2147483647 byt
6430: 65 73 20 6f 66 20 61 72 62 69 74 72 61 72 79 20  es of arbitrary 
6440: 64 61 74 61 2e 20 20 28 54 68 65 20 6b 65 79 20  data.  (The key 
6450: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
6460: 65 0a 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e.corresponds to
6470: 20 74 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20   the [rowid] of 
6480: 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 74 68  the SQL table th
6490: 61 74 20 74 68 65 20 62 2d 74 72 65 65 20 69 6d  at the b-tree im
64a0: 70 6c 65 6d 65 6e 74 73 2e 29 0a 49 6e 74 65 72  plements.).Inter
64b0: 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65  ior table b-tree
64c0: 73 20 68 6f 6c 64 20 6f 6e 6c 79 20 6b 65 79 73  s hold only keys
64d0: 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 74 6f   and pointers to
64e0: 20 63 68 69 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64   children..All d
64f0: 61 74 61 20 69 73 20 63 6f 6e 74 61 69 6e 65 64  ata is contained
6500: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
6510: 74 72 65 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e  tree leaves.</p>
6520: 0a 0a 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20  ..<p>Each entry 
6530: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
6540: 65 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ee consists of a
6550: 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
6560: 6f 66 20 75 70 0a 74 6f 20 32 31 34 37 34 38 33  of up.to 2147483
6570: 36 34 37 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  647 bytes in len
6580: 67 74 68 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e  gth and no data.
6590: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
65a0: 61 67 6d 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c  agment cell_payl
65b0: 6f 61 64 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61  oad {cell payloa
65c0: 64 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69  d}</tcl>.<p>Defi
65d0: 6e 65 20 74 68 65 20 22 70 61 79 6c 6f 61 64 22  ne the "payload"
65e0: 20 6f 66 20 61 20 63 65 6c 6c 20 74 6f 20 62 65   of a cell to be
65f0: 20 74 68 65 20 61 72 62 69 74 72 61 72 79 20 6c   the arbitrary l
6600: 65 6e 67 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66  ength section.of
6610: 20 74 68 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20   the cell.  For 
6620: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2c  an index b-tree,
6630: 20 74 68 65 20 6b 65 79 20 69 73 20 61 6c 77 61   the key is alwa
6640: 79 73 20 61 72 62 69 74 72 61 72 79 20 69 6e 20  ys arbitrary in 
6650: 6c 65 6e 67 74 68 0a 61 6e 64 20 68 65 6e 63 65  length.and hence
6660: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20   the payload is 
6670: 74 68 65 20 6b 65 79 2e 20 20 54 68 65 72 65 20  the key.  There 
6680: 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79  are no arbitrary
6690: 20 6c 65 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73   length elements
66a0: 0a 69 6e 20 74 68 65 20 63 65 6c 6c 73 20 6f 66  .in the cells of
66b0: 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20   interior table 
66c0: 62 2d 74 72 65 65 20 70 61 67 65 73 20 61 6e 64  b-tree pages and
66d0: 20 73 6f 20 74 68 6f 73 65 20 63 65 6c 6c 73 20   so those cells 
66e0: 68 61 76 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e  have no.payload.
66f0: 20 20 54 61 62 6c 65 20 62 2d 74 72 65 65 20 6c    Table b-tree l
6700: 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69  eaf pages contai
6710: 6e 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67  n arbitrary leng
6720: 74 68 20 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73  th content and.s
6730: 6f 20 66 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74  o for cells on t
6740: 68 6f 73 65 20 70 61 67 65 73 20 74 68 65 20 70  hose pages the p
6750: 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20 63 6f  ayload is the co
6760: 6e 74 65 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74  ntent..<p>When t
6770: 68 65 20 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f  he size of paylo
6780: 61 64 20 66 6f 72 20 61 20 63 65 6c 6c 20 65 78  ad for a cell ex
6790: 63 65 65 64 73 20 61 20 63 65 72 74 61 69 6e 20  ceeds a certain 
67a0: 74 68 72 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65  threshold (to.be
67b0: 20 64 65 66 69 6e 65 64 20 6c 61 74 65 72 29 20   defined later) 
67c0: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69  then only the fi
67d0: 72 73 74 20 66 65 77 20 62 79 74 65 73 20 6f 66  rst few bytes of
67e0: 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 61 72 65   the payload.are
67f0: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
6800: 2d 74 72 65 65 20 70 61 67 65 20 61 6e 64 20 74  -tree page and t
6810: 68 65 20 62 61 6c 61 6e 63 65 20 69 73 20 73 74  he balance is st
6820: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
6830: 20 6c 69 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74   list.of content
6840: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e   overflow pages.
6850: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  </p>..<p>A b-tre
6860: 65 20 70 61 67 65 20 69 73 20 64 69 76 69 64 65  e page is divide
6870: 64 20 69 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69  d into regions i
6880: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
6890: 6f 72 64 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  order:..<ol>.<li
68a0: 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64 61  >The 100-byte da
68b0: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
68c0: 65 72 20 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67  er (found on pag
68d0: 65 20 31 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68  e 1 only).<li>Th
68e0: 65 20 38 20 6f 72 20 31 32 20 62 79 74 65 20 62  e 8 or 12 byte b
68f0: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
6900: 72 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70  r.<li>The cell p
6910: 6f 69 6e 74 65 72 20 61 72 72 61 79 0a 3c 6c 69  ointer array.<li
6920: 3e 55 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  >Unallocated spa
6930: 63 65 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20  ce.<li>The cell 
6940: 63 6f 6e 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69  content area.<li
6950: 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72 65  >The reserved re
6960: 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e  gion..</ol>.</p>
6970: 0a 0a 3c 70 3e 54 68 65 20 31 30 30 2d 62 79 74  ..<p>The 100-byt
6980: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
6990: 68 65 61 64 65 72 20 69 73 20 66 6f 75 6e 64 20  header is found 
69a0: 6f 6e 6c 79 20 6f 6e 20 70 61 67 65 20 31 2c 20  only on page 1, 
69b0: 77 68 69 63 68 20 69 73 0a 61 6c 77 61 79 73 20  which is.always 
69c0: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70  a table b-tree p
69d0: 61 67 65 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20  age.  All other 
69e0: 62 2d 74 72 65 65 20 70 61 67 65 73 20 69 6e 20  b-tree pages in 
69f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6a00: 65 0a 6f 6d 69 74 20 74 68 69 73 20 31 30 30 2d  e.omit this 100-
6a10: 62 79 74 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e  byte header.</p>
6a20: 0a 0a 3c 70 3e 54 68 65 20 72 65 73 65 72 76 65  ..<p>The reserve
6a30: 64 20 72 65 67 69 6f 6e 20 69 73 20 61 6e 20 61  d region is an a
6a40: 72 65 61 20 6f 66 20 75 6e 75 73 65 64 20 73 70  rea of unused sp
6a50: 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ace at the end o
6a60: 66 20 65 76 65 72 79 0a 70 61 67 65 20 28 65 78  f every.page (ex
6a70: 63 65 70 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67  cept the locking
6a80: 20 70 61 67 65 29 20 74 68 61 74 20 65 78 74 65   page) that exte
6a90: 6e 73 69 6f 6e 73 20 63 61 6e 20 75 73 65 20 74  nsions can use t
6aa0: 6f 20 68 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a  o hold per-page.
6ab0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 54  information.  ^T
6ac0: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72  he size of the r
6ad0: 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69  eserved region i
6ae0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
6af0: 74 68 65 20 6f 6e 65 2d 62 79 74 65 0a 75 6e 73  the one-byte.uns
6b00: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 66 6f  igned integer fo
6b10: 75 6e 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74  und at an offset
6b20: 20 6f 66 20 32 30 20 69 6e 74 6f 20 74 68 65 20   of 20 into the 
6b30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65  database file he
6b40: 61 64 65 72 2e 0a 54 68 65 20 73 69 7a 65 20 6f  ader..The size o
6b50: 66 20 74 68 65 20 72 65 73 65 72 76 65 64 20 72  f the reserved r
6b60: 65 67 69 6f 6e 20 69 73 20 75 73 75 61 6c 6c 79  egion is usually
6b70: 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   zero.</p>..<p>T
6b80: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  he b-tree page h
6b90: 65 61 64 65 72 20 69 73 20 38 20 62 79 74 65 73  eader is 8 bytes
6ba0: 20 69 6e 20 73 69 7a 65 20 66 6f 72 20 6c 65 61   in size for lea
6bb0: 66 20 70 61 67 65 73 20 61 6e 64 20 31 32 0a 62  f pages and 12.b
6bc0: 79 74 65 73 20 66 6f 72 20 69 6e 74 65 72 69 6f  ytes for interio
6bd0: 72 20 70 61 67 65 73 2e 20 20 41 6c 6c 20 6d 75  r pages.  All mu
6be0: 6c 74 69 62 79 74 65 20 76 61 6c 75 65 73 20 69  ltibyte values i
6bf0: 6e 20 74 68 65 20 70 61 67 65 20 68 65 61 64 65  n the page heade
6c00: 72 0a 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e  r.are big-endian
6c10: 2e 0a 54 68 65 20 62 2d 74 72 65 65 20 70 61 67  ..The b-tree pag
6c20: 65 20 68 65 61 64 65 72 20 69 73 20 63 6f 6d 70  e header is comp
6c30: 6f 73 65 64 20 6f 66 20 74 68 65 20 66 6f 6c 6c  osed of the foll
6c40: 6f 77 69 6e 67 20 66 69 65 6c 64 73 3a 3c 2f 70  owing fields:</p
6c50: 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42  >..<center>.<i>B
6c60: 2d 74 72 65 65 20 50 61 67 65 20 48 65 61 64 65  -tree Page Heade
6c70: 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
6c80: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
6c90: 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74   width="80%">.<t
6ca0: 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
6cb0: 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
6cc0: 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ion.<tr><td alig
6cd0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6ce0: 74 6f 70 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 63  top>0<td align=c
6cf0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6d00: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
6d10: 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74 65 20  >.^The one-byte 
6d20: 66 6c 61 67 20 61 74 20 6f 66 66 73 65 74 20 30  flag at offset 0
6d30: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6d40: 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65  b-tree page type
6d50: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20  ..^A value of 2 
6d60: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
6d70: 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e  s an interior in
6d80: 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e  dex b-tree page.
6d90: 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 35 20 6d  .^A value of 5 m
6da0: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
6db0: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 74 61 62   an interior tab
6dc0: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  le b-tree page..
6dd0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 30 20 6d  ^A value of 10 m
6de0: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
6df0: 20 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62 2d   a leaf index b-
6e00: 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61  tree page..^A va
6e10: 6c 75 65 20 6f 66 20 31 33 20 6d 65 61 6e 73 20  lue of 13 means 
6e20: 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65  the page is a le
6e30: 61 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  af table b-tree 
6e40: 70 61 67 65 2e 0a 5e 41 6e 79 20 6f 74 68 65 72  page..^Any other
6e50: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62   value for the b
6e60: 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65 20  -tree page type 
6e70: 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72  is an error..<tr
6e80: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
6e90: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
6ea0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6eb0: 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61  align=top>2<td a
6ec0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20  lign=left>.^The 
6ed0: 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72  two-byte integer
6ee0: 20 61 74 20 6f 66 66 73 65 74 20 31 20 67 69 76   at offset 1 giv
6ef0: 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  es the start of 
6f00: 74 68 65 0a 66 69 72 73 74 20 66 72 65 65 62 6c  the.first freebl
6f10: 6f 63 6b 20 6f 6e 20 74 68 65 20 70 61 67 65 2c  ock on the page,
6f20: 20 6f 72 20 69 73 20 7a 65 72 6f 20 69 66 20 74   or is zero if t
6f30: 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65  here are no free
6f40: 62 6c 6f 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20  blocks..<tr><td 
6f50: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6f60: 69 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69  ign=top>3<td ali
6f70: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6f80: 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  =top>2<td align=
6f90: 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62  left>.^The two-b
6fa0: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
6fb0: 66 66 73 65 74 20 33 20 67 69 76 65 73 20 74 68  ffset 3 gives th
6fc0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c  e number of cell
6fd0: 73 20 6f 6e 20 74 68 65 20 70 61 67 65 2e 0a 3c  s on the page..<
6fe0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
6ff0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35  ter valign=top>5
7000: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
7010: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64   valign=top>2<td
7020: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54   align=left>.^(T
7030: 68 65 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65  he two-byte inte
7040: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 20  ger at offset 5 
7050: 64 65 73 69 67 6e 61 74 65 73 20 74 68 65 20 73  designates the s
7060: 74 61 72 74 20 6f 66 20 74 68 65 20 63 65 6c 6c  tart of the cell
7070: 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 2e 20 20   content.area.  
7080: 41 20 7a 65 72 6f 20 76 61 6c 75 65 20 66 6f 72  A zero value for
7090: 20 74 68 69 73 20 69 6e 74 65 67 65 72 20 69 73   this integer is
70a0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
70b0: 36 35 35 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64  65536.)^.<tr><td
70c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
70d0: 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c  lign=top>7<td al
70e0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
70f0: 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e  n=top>1<td align
7100: 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d  =left>.^The one-
7110: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
7120: 6f 66 66 73 65 74 20 37 20 67 69 76 65 73 20 74  offset 7 gives t
7130: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 61  he number of fra
7140: 67 6d 65 6e 74 65 64 20 66 72 65 65 0a 62 79 74  gmented free.byt
7150: 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 65  es within the ce
7160: 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2e  ll content area.
7170: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
7180: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
7190: 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >8<td align=cent
71a0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c  er valign=top>4<
71b0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
71c0: 28 54 68 65 20 66 6f 75 72 2d 62 79 74 65 20 70  (The four-byte p
71d0: 61 67 65 20 6e 75 6d 62 65 72 20 61 74 20 6f 66  age number at of
71e0: 66 73 65 74 20 38 20 69 73 20 74 68 65 20 72 69  fset 8 is the ri
71f0: 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72  ght-most pointer
7200: 2e 20 20 54 68 69 73 0a 76 61 6c 75 65 20 61 70  .  This.value ap
7210: 70 65 61 72 73 20 69 6e 20 74 68 65 20 68 65 61  pears in the hea
7220: 64 65 72 20 6f 66 20 69 6e 74 65 72 69 6f 72 20  der of interior 
7230: 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 6c  b-tree pages onl
7240: 79 20 61 6e 64 20 69 73 20 6f 6d 69 74 74 65 64  y and is omitted
7250: 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20   from.all other 
7260: 70 61 67 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65  pages.)^.</table
7270: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f  ></blockquote></
7280: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65  center>..<p>^The
7290: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72   cell pointer ar
72a0: 72 61 79 20 6f 66 20 61 20 62 2d 74 72 65 65 20  ray of a b-tree 
72b0: 70 61 67 65 20 69 6d 6d 65 64 69 61 74 65 6c 79  page immediately
72c0: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74   follows the b-t
72d0: 72 65 65 0a 70 61 67 65 20 68 65 61 64 65 72 2e  ree.page header.
72e0: 20 20 4c 65 74 20 4b 20 62 65 20 74 68 65 20 6e    Let K be the n
72f0: 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f  umber of cells o
7300: 6e 20 74 68 65 20 62 74 72 65 65 2e 20 20 5e 54  n the btree.  ^T
7310: 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a  he cell pointer.
7320: 61 72 72 61 79 20 63 6f 6e 73 69 73 74 73 20 6f  array consists o
7330: 66 20 4b 20 32 2d 62 79 74 65 20 69 6e 74 65 67  f K 2-byte integ
7340: 65 72 20 6f 66 66 73 65 74 73 20 74 6f 20 74 68  er offsets to th
7350: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e  e cell contents.
7360: 20 20 5e 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e    ^The.cell poin
7370: 74 65 72 73 20 61 72 65 20 61 72 72 61 6e 67 65  ters are arrange
7380: 64 20 69 6e 20 6b 65 79 20 6f 72 64 65 72 20 77  d in key order w
7390: 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65  ith left-most ce
73a0: 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74  ll (the cell wit
73b0: 68 20 74 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b  h the.smallest k
73c0: 65 79 29 20 66 69 72 73 74 20 61 6e 64 20 74 68  ey) first and th
73d0: 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c  e right-most cel
73e0: 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68  l (the cell with
73f0: 20 74 68 65 20 6c 61 72 67 65 73 74 0a 6b 65 79   the largest.key
7400: 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ) last.</p>..<p>
7410: 43 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20  Cell content is 
7420: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 63 65  stored in the ce
7430: 6c 6c 20 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f  ll content regio
7440: 6e 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  n of the b-tree 
7450: 70 61 67 65 2e 0a 53 51 4c 69 74 65 20 73 74 72  page..SQLite str
7460: 69 76 65 73 20 74 6f 20 70 6c 61 63 65 20 63 65  ives to place ce
7470: 6c 6c 73 20 61 73 20 66 61 72 20 74 6f 77 61 72  lls as far towar
7480: 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
7490: 20 62 2d 74 72 65 65 20 70 61 67 65 20 61 73 0a   b-tree page as.
74a0: 69 74 20 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72  it can, in order
74b0: 20 74 6f 20 6c 65 61 76 65 20 73 70 61 63 65 20   to leave space 
74c0: 66 6f 72 20 66 75 74 75 72 65 20 67 72 6f 77 74  for future growt
74d0: 68 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 70 6f  h of the cell po
74e0: 69 6e 74 65 72 20 61 72 72 61 79 2e 0a 54 68 65  inter array..The
74f0: 20 61 72 65 61 20 69 6e 20 62 65 74 77 65 65 6e   area in between
7500: 20 74 68 65 20 6c 61 73 74 20 63 65 6c 6c 20 70   the last cell p
7510: 6f 69 6e 74 65 72 20 61 72 72 61 79 20 65 6e 74  ointer array ent
7520: 72 79 20 61 6e 64 20 74 68 65 20 62 65 67 69 6e  ry and the begin
7530: 6e 69 6e 67 20 6f 66 0a 74 68 65 20 66 69 72 73  ning of.the firs
7540: 74 20 63 65 6c 6c 20 69 73 20 74 68 65 20 75 6e  t cell is the un
7550: 61 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e  allocated region
7560: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61  ..</p>..<p>^If a
7570: 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e   page contains n
7580: 6f 20 63 65 6c 6c 73 20 28 77 68 69 63 68 20 69  o cells (which i
7590: 73 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20  s only possible 
75a0: 66 6f 72 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  for a root page.
75b0: 6f 66 20 61 20 74 61 62 6c 65 20 74 68 61 74 20  of a table that 
75c0: 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73  contains no rows
75d0: 29 20 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65  ) then the offse
75e0: 74 20 74 6f 20 74 68 65 0a 63 65 6c 6c 20 63 6f  t to the.cell co
75f0: 6e 74 65 6e 74 20 61 72 65 61 20 77 69 6c 6c 20  ntent area will 
7600: 65 71 75 61 6c 20 74 68 65 20 70 61 67 65 20 73  equal the page s
7610: 69 7a 65 20 6d 69 6e 75 73 20 74 68 65 20 62 79  ize minus the by
7620: 74 65 73 20 6f 66 20 72 65 73 65 72 76 65 64 20  tes of reserved 
7630: 73 70 61 63 65 2e 0a 5e 28 49 66 20 74 68 65 20  space..^(If the 
7640: 64 61 74 61 62 61 73 65 20 75 73 65 73 20 61 20  database uses a 
7650: 36 35 35 33 36 2d 62 79 74 65 20 70 61 67 65 20  65536-byte page 
7660: 73 69 7a 65 20 61 6e 64 20 74 68 65 20 72 65 73  size and the res
7670: 65 72 76 65 64 20 73 70 61 63 65 20 69 73 20 7a  erved space is z
7680: 65 72 6f 0a 28 74 68 65 20 75 73 75 61 6c 20 76  ero.(the usual v
7690: 61 6c 75 65 20 66 6f 72 20 72 65 73 65 72 76 65  alue for reserve
76a0: 64 20 73 70 61 63 65 29 20 74 68 65 6e 20 74 68  d space) then th
76b0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f  e cell content o
76c0: 66 66 73 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74  ffset of an.empt
76d0: 79 20 70 61 67 65 20 77 61 6e 74 73 20 74 6f 20  y page wants to 
76e0: 62 65 20 36 35 35 33 36 2e 20 20 0a 48 6f 77 65  be 65536.  .Howe
76f0: 76 65 72 2c 20 74 68 61 74 20 69 6e 74 65 67 65  ver, that intege
7700: 72 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74  r is too large t
7710: 6f 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  o be stored in a
7720: 0a 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64  .2-byte unsigned
7730: 20 69 6e 74 65 67 65 72 2c 20 73 6f 20 61 20 76   integer, so a v
7740: 61 6c 75 65 20 6f 66 20 30 20 69 73 20 75 73 65  alue of 0 is use
7750: 64 20 69 6e 20 69 74 73 20 70 6c 61 63 65 2e 29  d in its place.)
7760: 5e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63  ^..<p>A freebloc
7770: 6b 20 69 73 20 61 20 73 74 72 75 63 74 75 72 65  k is a structure
7780: 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66   used to identif
7790: 79 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70  y unallocated sp
77a0: 61 63 65 20 77 69 74 68 69 6e 0a 61 20 62 2d 74  ace within.a b-t
77b0: 72 65 65 20 70 61 67 65 2e 20 20 46 72 65 65 62  ree page.  Freeb
77c0: 6c 6f 63 6b 73 20 61 72 65 20 6f 72 67 61 6e 69  locks are organi
77d0: 7a 65 64 20 61 73 20 61 20 63 68 61 69 6e 2e 20  zed as a chain. 
77e0: 20 5e 54 68 65 20 66 69 72 73 74 20 32 20 62 79   ^The first 2 by
77f0: 74 65 73 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f  tes of.a freeblo
7800: 63 6b 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64  ck are a big-end
7810: 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63  ian integer whic
7820: 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
7830: 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  in the b-tree pa
7840: 67 65 0a 6f 66 20 74 68 65 20 6e 65 78 74 20 66  ge.of the next f
7850: 72 65 65 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20  reeblock in the 
7860: 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69  chain, or zero i
7870: 66 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20  f the freeblock 
7880: 69 73 20 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74  is the last on.t
7890: 68 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20  he chain.  ^The 
78a0: 74 68 69 72 64 20 61 6e 64 20 66 6f 75 72 74 68  third and fourth
78b0: 20 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 66   bytes of each f
78c0: 72 65 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20  reeblock form.a 
78d0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
78e0: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
78f0: 73 69 7a 65 20 6f 66 20 74 68 65 20 66 72 65 65  size of the free
7900: 62 6c 6f 63 6b 20 69 6e 20 62 79 74 65 73 2c 20  block in bytes, 
7910: 69 6e 63 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d  including.the 4-
7920: 62 79 74 65 20 68 65 61 64 65 72 2e 20 20 5e 46  byte header.  ^F
7930: 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c  reeblocks are al
7940: 77 61 79 73 20 63 6f 6e 6e 65 63 74 65 64 20 69  ways connected i
7950: 6e 20 6f 72 64 65 72 20 0a 6f 66 20 69 6e 63 72  n order .of incr
7960: 65 61 73 69 6e 67 20 6f 66 66 73 65 74 2e 20 20  easing offset.  
7970: 5e 54 68 65 20 73 65 63 6f 6e 64 20 66 69 65 6c  ^The second fiel
7980: 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  d of the b-tree 
7990: 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20 74  page header is t
79a0: 68 65 0a 6f 66 66 73 65 74 20 6f 66 20 74 68 65  he.offset of the
79b0: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
79c0: 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65  , or zero if the
79d0: 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c  re are no freebl
79e0: 6f 63 6b 73 20 6f 6e 20 74 68 65 0a 70 61 67 65  ocks on the.page
79f0: 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  .  ^In a well-fo
7a00: 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67 65  rmed b-tree page
7a10: 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 61 6c 77  , there will alw
7a20: 61 79 73 20 62 65 20 61 74 20 6c 65 61 73 74 20  ays be at least 
7a30: 6f 6e 65 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20  one cell.before 
7a40: 74 68 65 20 66 69 72 73 74 20 66 72 65 65 62 6c  the first freebl
7a50: 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66  ock.</p>..<p>A f
7a60: 72 65 65 62 6c 6f 63 6b 20 72 65 71 75 69 72 65  reeblock require
7a70: 73 20 61 74 20 6c 65 61 73 74 20 34 20 62 79 74  s at least 4 byt
7a80: 65 73 20 6f 66 20 73 70 61 63 65 2e 20 20 49 66  es of space.  If
7a90: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 73 6f   there is an iso
7aa0: 6c 61 74 65 64 0a 67 72 6f 75 70 20 6f 66 20 31  lated.group of 1
7ab0: 2c 20 32 2c 20 6f 72 20 33 20 75 6e 75 73 65 64  , 2, or 3 unused
7ac0: 20 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68   bytes within th
7ad0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61  e cell content a
7ae0: 72 65 61 2c 20 74 68 6f 73 65 20 62 79 74 65 73  rea, those bytes
7af0: 0a 63 6f 6d 70 72 69 73 65 20 61 20 66 72 61 67  .comprise a frag
7b00: 6d 65 6e 74 2e 20 20 5e 54 68 65 20 74 6f 74 61  ment.  ^The tota
7b10: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
7b20: 73 20 69 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e  s in all fragmen
7b30: 74 73 20 69 73 20 73 74 6f 72 65 64 0a 69 6e 20  ts is stored.in 
7b40: 74 68 65 20 66 69 66 74 68 20 66 69 65 6c 64 20  the fifth field 
7b50: 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  of the b-tree pa
7b60: 67 65 20 68 65 61 64 65 72 2e 20 20 5e 49 6e 20  ge header.  ^In 
7b70: 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d  a well-formed b-
7b80: 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 74  tree page,.the t
7b90: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
7ba0: 79 74 65 73 20 69 6e 20 66 72 61 67 6d 65 6e 74  ytes in fragment
7bb0: 73 20 6d 61 79 20 6e 6f 74 20 65 78 63 65 65 64  s may not exceed
7bc0: 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65   60.</p>..<p>The
7bd0: 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66   total amount of
7be0: 20 66 72 65 65 20 73 70 61 63 65 20 6f 6e 20 61   free space on a
7bf0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e   b-tree page con
7c00: 73 69 73 74 73 20 6f 66 20 74 68 65 20 73 69 7a  sists of the siz
7c10: 65 0a 6f 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63  e.of the unalloc
7c20: 61 74 65 64 20 72 65 67 69 6f 6e 20 70 6c 75 73  ated region plus
7c30: 20 74 68 65 20 74 6f 74 61 6c 20 73 69 7a 65 20   the total size 
7c40: 6f 66 20 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b  of all freeblock
7c50: 73 20 70 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65  s plus the.numbe
7c60: 72 20 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20  r of fragmented 
7c70: 66 72 65 65 20 62 79 74 65 73 2e 20 20 5e 53 51  free bytes.  ^SQ
7c80: 4c 69 74 65 20 6d 61 79 20 66 72 6f 6d 20 74 69  Lite may from ti
7c90: 6d 65 20 74 6f 20 74 69 6d 65 20 72 65 6f 72 67  me to time reorg
7ca0: 61 6e 69 7a 65 0a 61 20 62 2d 74 72 65 65 20 70  anize.a b-tree p
7cb0: 61 67 65 20 73 6f 20 74 68 61 74 20 74 68 65 72  age so that ther
7cc0: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
7cd0: 63 6b 73 20 6f 72 20 66 72 61 67 6d 65 6e 74 20  cks or fragment 
7ce0: 62 79 74 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65  bytes, all.unuse
7cf0: 64 20 62 79 74 65 73 20 61 72 65 20 63 6f 6e 74  d bytes are cont
7d00: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 75 6e 61  ained in the una
7d10: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 72  llocated space r
7d20: 65 67 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63  egion, and all.c
7d30: 65 6c 6c 73 20 61 72 65 20 70 61 63 6b 65 64 20  ells are packed 
7d40: 74 69 67 68 74 6c 79 20 61 74 20 74 68 65 20 65  tightly at the e
7d50: 6e 64 20 6f 66 20 74 68 65 20 70 61 67 65 2e 20  nd of the page. 
7d60: 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
7d70: 0a 22 64 65 66 72 61 67 6d 65 6e 74 69 6e 67 22  ."defragmenting"
7d80: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
7d90: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
7da0: 72 61 67 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b  ragment varint {
7db0: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
7dc0: 69 6e 74 65 67 65 72 7d 20 7b 76 61 72 69 6e 74  integer} {varint
7dd0: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61  }</tcl>..<p>A va
7de0: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
7df0: 74 65 67 65 72 20 6f 72 20 22 76 61 72 69 6e 74  teger or "varint
7e00: 22 20 69 73 20 61 20 73 74 61 74 69 63 20 48 75  " is a static Hu
7e10: 66 66 6d 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f  ffman encoding.o
7e20: 66 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  f 64-bit twos-co
7e30: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
7e40: 73 20 74 68 61 74 20 75 73 65 73 20 6c 65 73 73  s that uses less
7e50: 20 73 70 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c   space for small
7e60: 20 70 6f 73 69 74 69 76 65 20 0a 76 61 6c 75 65   positive .value
7e70: 73 2e 20 0a 41 20 76 61 72 69 6e 74 20 69 73 20  s. .A varint is 
7e80: 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20  between 1 and 9 
7e90: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
7ea0: 20 20 54 68 65 20 76 61 72 69 6e 74 20 63 6f 6e    The varint con
7eb0: 73 69 73 74 73 20 6f 66 20 65 69 74 68 65 72 0a  sists of either.
7ec0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74  zero or more byt
7ed0: 65 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65  e which have the
7ee0: 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
7ef0: 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
7f00: 61 20 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69  a single byte.wi
7f10: 74 68 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  th the high-orde
7f20: 72 20 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20  r bit clear, or 
7f30: 6e 69 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63  nine bytes, whic
7f40: 68 65 76 65 72 20 69 73 20 73 68 6f 72 74 65 72  hever is shorter
7f50: 2e 0a 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65  ..The lower seve
7f60: 6e 20 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f  n bits of each o
7f70: 66 20 74 68 65 20 66 69 72 73 74 20 65 69 67 68  f the first eigh
7f80: 74 20 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20  t bytes and all 
7f90: 38 20 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69  8 bits of.the ni
7fa0: 6e 74 68 20 62 79 74 65 20 61 72 65 20 75 73 65  nth byte are use
7fb0: 64 20 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74  d to reconstruct
7fc0: 20 74 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73   the 64-bit twos
7fd0: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
7fe0: 67 65 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65  ger..Varints are
7ff0: 20 62 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74   big-endian: bit
8000: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
8010: 20 65 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66   earlier byte of
8020: 20 74 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20   the varint.are 
8030: 74 68 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69  the more signifi
8040: 63 61 6e 74 20 61 6e 64 20 62 69 74 73 20 74 61  cant and bits ta
8050: 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61 74  ken from the lat
8060: 65 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a  er bytes. </p>..
8070: 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f 66  <p>The format of
8080: 20 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73 20   a cell depends 
8090: 6f 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f 66  on which kind of
80a0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 65   b-tree page the
80b0: 20 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f 6e   cell.appears on
80c0: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
80d0: 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65   table shows the
80e0: 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20 63   elements of a c
80f0: 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f 66  ell, in.order of
8100: 20 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f 72   appearance, for
8110: 20 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d 74   the various b-t
8120: 72 65 65 20 70 61 67 65 20 74 79 70 65 73 2e 3c  ree page types.<
8130: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
8140: 3e 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62  ><dl>.<dt><p>Tab
8150: 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43  le B-Tree Leaf C
8160: 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 64  ell (header 0x0d
8170: 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  ):</p></dt>.<dd>
8180: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61  <p><ul>.<li>A va
8190: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
81a0: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
81b0: 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f  f bytes of 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 41  y.overflow.<li>A
81e0: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
81f0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79   the integer key
8200: 2c 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69 64  , a.k.a. "[rowid
8210: 5d 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69  ]".<li>The initi
8220: 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68  al portion of th
8230: 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64  e payload that d
8240: 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f  oes not spill to
8250: 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e   overflow.pages.
8260: 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69  .<li>A 4-byte bi
8270: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
8280: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
8290: 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20   the first page 
82a0: 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20  of the.overflow 
82b0: 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74  page list - omit
82c0: 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f  ted if all paylo
82d0: 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62  ad fits on the b
82e0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c  -tree page..</ul
82f0: 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  ></p></dd>..<dt>
8300: 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20  <p>Table B-Tree 
8310: 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20 28 68  Interior Cell (h
8320: 65 61 64 65 72 20 30 78 30 35 29 3a 3c 2f 70 3e  eader 0x05):</p>
8330: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c  </dt>.<dd><p><ul
8340: 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62  >.<li>A 4-byte b
8350: 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e  ig-endian page n
8360: 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74  umber which is t
8370: 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f  he left child po
8380: 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72  inter..<li>A var
8390: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
83a0: 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75   integer key.</u
83b0: 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  l></p></dd>..<dt
83c0: 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65  ><p>Index B-Tree
83d0: 20 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61 64   Leaf Cell (head
83e0: 65 72 20 30 78 30 61 29 3a 3c 2f 70 3e 3c 2f 64  er 0x0a):</p></d
83f0: 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c  t>.<dd><p><ul>.<
8400: 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63  li>A varint whic
8410: 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  h is the total n
8420: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
8430: 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69  f key payload, i
8440: 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65  ncluding any.ove
8450: 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e  rflow.<li>The in
8460: 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66  itial portion of
8470: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61   the payload tha
8480: 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c  t does not spill
8490: 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67   to overflow.pag
84a0: 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65  es..<li>A 4-byte
84b0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
84c0: 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20  ger page number 
84d0: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61  for the first pa
84e0: 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c  ge of the.overfl
84f0: 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f  ow page list - o
8500: 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61  mitted if all pa
8510: 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68  yload fits on th
8520: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c  e b-tree page..<
8530: 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  /ul></p></dd>..<
8540: 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72  dt><p>Index B-Tr
8550: 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c  ee Interior Cell
8560: 20 28 68 65 61 64 65 72 20 30 78 30 32 29 3a 3c   (header 0x02):<
8570: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
8580: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  <ul>.<li>A 4-byt
8590: 65 20 62 69 67 2d 65 6e 64 69 61 6e 70 61 67 65  e big-endianpage
85a0: 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73   number which is
85b0: 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20   the left child 
85c0: 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76  pointer..<li>A v
85d0: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
85e0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
85f0: 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20  of bytes of key 
8600: 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69  payload, includi
8610: 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a  ng any.overflow.
8620: 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20  <li>The initial 
8630: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  portion of the p
8640: 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73  ayload that does
8650: 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76   not spill to ov
8660: 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c  erflow.pages..<l
8670: 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65  i>A 4-byte big-e
8680: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61  ndian integer pa
8690: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
86a0: 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20  e first page of 
86b0: 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67  the.overflow pag
86c0: 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64  e list - omitted
86d0: 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20   if all payload 
86e0: 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  fits on the b-tr
86f0: 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f  ee page..</ul></
8700: 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62  p></dd>.</dl></b
8710: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
8720: 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  he information a
8730: 62 6f 76 65 20 63 61 6e 20 62 65 20 72 65 63 61  bove can be reca
8740: 73 74 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20  st into a table 
8750: 66 6f 72 6d 61 74 20 61 73 20 66 6f 6c 6c 6f 77  format as follow
8760: 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  s:</p>..<tcl>hd_
8770: 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 66 6f 72  fragment cellfor
8780: 6d 61 74 20 7b 63 65 6c 6c 20 66 6f 72 6d 61 74  mat {cell format
8790: 20 73 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c 3e 0a   summary}</tcl>.
87a0: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72  <center>.<i>B-tr
87b0: 65 65 20 43 65 6c 6c 20 46 6f 72 6d 61 74 3c 2f  ee Cell Format</
87c0: 69 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  i>.<table border
87d0: 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a  =1 width="80%">.
87e0: 3c 74 72 3e 3c 74 68 20 72 6f 77 73 70 61 6e 3d  <tr><th rowspan=
87f0: 32 3e 44 61 74 61 74 79 70 65 0a 20 20 20 20 3c  2>Datatype.    <
8800: 74 68 20 63 6f 6c 73 70 61 6e 3d 34 3e 41 70 70  th colspan=4>App
8810: 65 61 72 73 20 69 6e 2e 2e 2e 0a 20 20 20 20 3c  ears in....    <
8820: 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 65 73  th rowspan=2>Des
8830: 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 68  cription.<tr><th
8840: 3e 54 61 62 6c 65 20 4c 65 61 66 20 28 30 78 30  >Table Leaf (0x0
8850: 64 29 0a 20 20 20 20 3c 74 68 3e 54 61 62 6c 65  d).    <th>Table
8860: 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30 35 29   Interior (0x05)
8870: 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c  .    <th>Index L
8880: 65 61 66 20 28 30 78 30 61 29 0a 20 20 20 20 3c  eaf (0x0a).    <
8890: 74 68 3e 49 6e 64 65 78 20 49 6e 74 65 72 69 6f  th>Index Interio
88a0: 72 20 28 30 78 30 32 29 0a 3c 74 72 3e 3c 74 64  r (0x02).<tr><td
88b0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
88c0: 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20  lign=top>4-byte 
88d0: 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20  integer.    <td 
88e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
88f0: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8900: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8910: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8920: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8930: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8940: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8950: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8960: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8970: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8980: 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20  align=left>Page 
8990: 6e 75 6d 62 65 72 20 6f 66 20 6c 65 66 74 20 63  number of left c
89a0: 68 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  hild.<tr><td ali
89b0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
89c0: 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20  =top>varint.    
89d0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
89e0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
89f0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8a00: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8a10: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8a20: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8a30: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8a40: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8a50: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8a60: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8a70: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
8a80: 3e 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73  >Number of bytes
8a90: 20 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e   of payload.<tr>
8aa0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8ab0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69   valign=top>vari
8ac0: 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  nt.    <td align
8ad0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8ae0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8af0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b00: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8b10: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8b20: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8b30: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8b40: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b50: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
8b60: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
8b70: 3d 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e  =left>Rowid.<tr>
8b80: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b90: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65   valign=top>byte
8ba0: 20 61 72 72 61 79 0a 20 20 20 20 3c 74 64 20 61   array.    <td a
8bb0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8bc0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8bd0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8be0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8bf0: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
8c00: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8c10: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8c20: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8c30: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8c40: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8c50: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c   align=left>Payl
8c60: 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  oad.<tr><td alig
8c70: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8c80: 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67  top>4-byte integ
8c90: 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  er.    <td align
8ca0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8cb0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8cc0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8cd0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
8ce0: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
8cf0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8d00: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8d10: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8d20: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8d30: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8d40: 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d  gn=left>Page num
8d50: 62 65 72 20 6f 66 20 66 69 72 73 74 20 6f 76 65  ber of first ove
8d60: 72 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62  rflow page.</tab
8d70: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 0a  le></center>....
8d80: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
8d90: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8da0: 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e 74 20  ..<p>The amount 
8db0: 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  of payload that 
8dc0: 73 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65 72  spills onto over
8dd0: 66 6c 6f 77 20 70 61 67 65 73 20 61 6c 73 6f 20  flow pages also 
8de0: 64 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65 20 70  depends on.the p
8df0: 61 67 65 20 74 79 70 65 2e 20 20 46 6f 72 20 74  age type.  For t
8e00: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d  he following com
8e10: 70 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74 20 55  putations, let U
8e20: 20 62 65 20 74 68 65 20 75 73 61 62 6c 65 20 73   be the usable s
8e30: 69 7a 65 0a 6f 66 20 61 20 64 61 74 61 62 61 73  ize.of a databas
8e40: 65 20 70 61 67 65 2c 20 74 68 65 20 74 6f 74 61  e page, the tota
8e50: 6c 20 70 61 67 65 20 73 69 7a 65 20 6c 65 73 73  l page size less
8e60: 20 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70   the reserved sp
8e70: 61 63 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f  ace at the.end o
8e80: 66 20 65 61 63 68 20 70 61 67 65 2e 20 20 41 6e  f each page.  An
8e90: 64 20 6c 65 74 20 50 20 62 65 20 74 68 65 20 70  d let P be the p
8ea0: 61 79 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f 70 3e  ayload size.</p>
8eb0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64  ..<blockquote><d
8ec0: 6c 3e 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54  l>.<dt>Table B-T
8ed0: 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f  ree Leaf Cell:</
8ee0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49 66 20  dt>.<dd><p>.^If 
8ef0: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
8f00: 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20   P is less than 
8f10: 6f 72 20 65 71 75 61 6c 20 74 6f 20 55 2d 33 35  or equal to U-35
8f20: 20 74 68 65 6e 0a 74 68 65 20 65 6e 74 69 72 65   then.the entire
8f30: 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72   payload is stor
8f40: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
8f50: 20 6c 65 61 66 20 70 61 67 65 2e 20 20 0a 5e 28   leaf page.  .^(
8f60: 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29  Let M be ((U-12)
8f70: 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66  *32/255)-23.  If
8f80: 20 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68   P is greater th
8f90: 61 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74 68 65  an U-35.then the
8fa0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 20   number of byte 
8fb0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d  stored on the b-
8fc0: 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 69  tree leaf page i
8fd0: 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66  s the smaller of
8fe0: 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29  .M+((P-M)%(U-4))
8ff0: 20 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e 28 4e   and U-35.)^.^(N
9000: 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20  ote that number 
9010: 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20  of bytes stored 
9020: 6f 6e 20 74 68 65 20 6c 65 61 66 20 70 61 67 65  on the leaf page
9030: 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74   is never less t
9040: 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64  han M.)^.</p></d
9050: 64 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d  d>..<dt>Table B-
9060: 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65  Tree Interior Ce
9070: 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  ll:</dt>.<dd><p>
9080: 0a 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73 20  .Interior pages 
9090: 6f 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  of table b-trees
90a0: 20 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64   have no payload
90b0: 20 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69 73   and so there is
90c0: 20 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f   never.any paylo
90d0: 61 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70  ad to spill..</p
90e0: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64 65  ></dd>..<dt>Inde
90f0: 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72  x B-Tree Leaf Or
9100: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c   Interior Cell:<
9110: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c  /dt>.<dd><p>.^(L
9120: 65 74 20 58 20 62 65 20 28 28 55 2d 31 32 29 2a  et X be ((U-12)*
9130: 36 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49 66  64/255)-23).  If
9140: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a   the payload siz
9150: 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e  e P is less than
9160: 0a 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74  .or equal to X t
9170: 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70  hen the entire p
9180: 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64  ayload is stored
9190: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
91a0: 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62  age.)^.^(Let M b
91b0: 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35  e ((U-12)*32/255
91c0: 29 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20 67  )-23.  If P is g
91d0: 72 65 61 74 65 72 20 74 68 61 6e 20 58 20 74 68  reater than X th
91e0: 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  en the number.of
91f0: 20 62 79 74 65 20 73 74 6f 72 65 64 20 6f 6e 20   byte stored on 
9200: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
9210: 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f  is the smaller o
9220: 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  f.M+((P-M)%(U-4)
9230: 29 20 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e 6f 74  ) and X.)^.^(Not
9240: 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f 66  e that number of
9250: 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e   bytes stored on
9260: 20 74 68 65 20 69 6e 64 65 78 20 70 61 67 65 20   the index page 
9270: 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68  is never less th
9280: 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64  an M.)^.</p></dd
9290: 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75  >.</dl></blockqu
92a0: 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65  ote>..<p>The ove
92b0: 72 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c 64 73  rflow thresholds
92c0: 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f   are designed to
92d0: 20 67 69 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20   give a minimum 
92e0: 66 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20  fanout of.4 for 
92f0: 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20 61 6e  index b-trees an
9300: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65  d to make sure e
9310: 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 70 61 79  nough of the pay
9320: 6c 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65 20 62  load.is on the b
9330: 2d 74 72 65 65 20 70 61 67 65 20 74 68 61 74 20  -tree page that 
9340: 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
9350: 72 20 63 61 6e 20 75 73 75 61 6c 6c 79 20 62 65  r can usually be
9360: 20 61 63 63 65 73 73 65 64 0a 77 69 74 68 6f 75   accessed.withou
9370: 74 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20  t consulting an 
9380: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2e 20 20  overflow page.  
9390: 49 6e 20 68 69 6e 64 73 69 67 68 74 2c 20 74 68  In hindsight, th
93a0: 65 20 64 65 73 69 67 6e 65 72 73 20 6f 66 0a 74  e designers of.t
93b0: 68 65 20 53 51 4c 69 74 65 20 62 2d 74 72 65 65  he SQLite b-tree
93c0: 20 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65 20 74   logic realize t
93d0: 68 61 74 20 74 68 65 73 65 20 74 68 72 65 73 68  hat these thresh
93e0: 6f 6c 64 73 20 63 6f 75 6c 64 20 68 61 76 65 20  olds could have 
93f0: 62 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73  been.made much s
9400: 69 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76 65 72  impler.  However
9410: 2c 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  , the computatio
9420: 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ns cannot be cha
9430: 6e 67 65 64 0a 77 69 74 68 6f 75 74 20 72 65 73  nged.without res
9440: 75 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63  ulting in an inc
9450: 6f 6d 70 61 74 69 62 6c 65 20 66 69 6c 65 20 66  ompatible file f
9460: 6f 72 6d 61 74 2e 20 20 41 6e 64 20 74 68 65 20  ormat.  And the 
9470: 63 75 72 72 65 6e 74 20 63 6f 6d 70 75 74 61 74  current computat
9480: 69 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20  ions.work well, 
9490: 65 76 65 6e 20 69 66 20 74 68 65 79 20 61 72 65  even if they are
94a0: 20 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65   a little comple
94b0: 78 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  x.</p>..<tcl>hd_
94c0: 66 72 61 67 6d 65 6e 74 20 6f 76 66 6c 70 67 73  fragment ovflpgs
94d0: 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 7d   {overflow page}
94e0: 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73   {overflow pages
94f0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 36 20  }</tcl>.<h3>1.6 
9500: 43 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76 65  Cell Payload Ove
9510: 72 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68 33 3e  rflow Pages</h3>
9520: 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 70  ..<p>^When the p
9530: 61 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74 72  ayload of a b-tr
9540: 65 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20 6c  ee cell is too l
9550: 61 72 67 65 20 66 6f 72 20 74 68 65 20 62 2d 74  arge for the b-t
9560: 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 73 75  ree page,.the su
9570: 72 70 6c 75 73 20 69 73 20 73 70 69 6c 6c 65 64  rplus is spilled
9580: 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70   onto overflow p
9590: 61 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c 6f 77  ages.  ^Overflow
95a0: 20 70 61 67 65 73 20 66 6f 72 6d 20 61 20 6c 69   pages form a li
95b0: 6e 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54 68 65  nked.list.  ^The
95c0: 20 66 69 72 73 74 20 66 6f 75 72 20 62 79 74 65   first four byte
95d0: 73 20 6f 66 20 65 61 63 68 20 6f 76 65 72 66 6c  s of each overfl
95e0: 6f 77 20 70 61 67 65 20 61 72 65 20 61 20 62 69  ow page are a bi
95f0: 67 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65 72  g-endian.integer
9600: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70 61   which is the pa
9610: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
9620: 20 6e 65 78 74 20 70 61 67 65 20 69 6e 20 74 68   next page in th
9630: 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f  e chain, or zero
9640: 0a 66 6f 72 20 74 68 65 20 66 69 6e 61 6c 20 70  .for the final p
9650: 61 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e  age in the chain
9660: 2e 20 20 5e 54 68 65 20 66 69 66 74 68 20 62 79  .  ^The fifth by
9670: 74 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c  te through the l
9680: 61 73 74 20 75 73 61 62 6c 65 0a 62 79 74 65 20  ast usable.byte 
9690: 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  are used to hold
96a0: 20 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65 6e   overflow conten
96b0: 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 37 20  t.</p>..<h3>1.7 
96c0: 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50  Pointer Map or P
96d0: 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 33 3e  trmap Pages</h3>
96e0: 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70  ..<p>Pointer map
96f0: 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65 73   or ptrmap pages
9700: 20 61 72 65 20 65 78 74 72 61 20 70 61 67 65 73   are extra pages
9710: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
9720: 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d  he database.to m
9730: 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ake the operatio
9740: 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75  n of [auto_vacuu
9750: 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e  m] and [incremen
9760: 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65  tal_vacuum] mode
9770: 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74  s.more efficient
9780: 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20 74 79  .  Other page ty
9790: 70 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  pes in the datab
97a0: 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61  ase typically ha
97b0: 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d  ve pointers.from
97c0: 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64   parent to child
97d0: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
97e0: 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  an interior b-tr
97f0: 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73  ee page contains
9800: 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73   pointers.to its
9810: 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61   child b-tree pa
9820: 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66  ges and an overf
9830: 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61 20  low chain has a 
9840: 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72  pointer.from ear
9850: 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69  lier to later li
9860: 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e  nks in the chain
9870: 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61 67 65  .  A ptrmap page
9880: 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67   contains linkag
9890: 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f  e.information go
98a0: 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73  ing in the oppos
98b0: 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66  ite direction, f
98c0: 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72  rom child to par
98d0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74  ent.</p>..<p>^Pt
98e0: 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73 74 20  rmap pages must 
98f0: 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74  exist in any dat
9900: 61 62 61 73 65 20 66 69 6c 65 20 77 68 69 63 68  abase file which
9910: 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a   has a non-zero.
9920: 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74  largest root b-t
9930: 72 65 65 20 70 61 67 65 20 76 61 6c 75 65 20 61  ree page value a
9940: 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74  t offset 52 in t
9950: 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
9960: 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72 67  er..^If the larg
9970: 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20  est root b-tree 
9980: 70 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a 65  page value is ze
9990: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74  ro, then the dat
99a0: 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63  abase must not.c
99b0: 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61  ontain ptrmap pa
99c0: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e  ges.</p>..<p>^In
99d0: 20 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68   a database with
99e0: 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74   ptrmap pages, t
99f0: 68 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20  he first ptrmap 
9a00: 70 61 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a  page is page 2..
9a10: 41 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f  A ptrmap page co
9a20: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
9a30: 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74  ay of 5-byte ent
9a40: 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20  ries.  Let J be 
9a50: 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d  the.number of 5-
9a60: 62 79 74 65 20 65 6e 74 72 69 65 73 20 74 68 61  byte entries tha
9a70: 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68  t will fit in th
9a80: 65 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f  e usable space o
9a90: 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74  f a page..(In ot
9aa0: 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35  her words, J=U/5
9ab0: 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74 20 70  .)  ^The first p
9ac0: 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20  trmap page will 
9ad0: 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69  contain back poi
9ae0: 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  nter.information
9af0: 20 66 6f 72 20 70 61 67 65 73 20 33 20 74 68 72   for pages 3 thr
9b00: 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73  ough J+2, inclus
9b10: 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e  ive.  ^The secon
9b20: 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61  d pointer map.pa
9b30: 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61  ge will be on pa
9b40: 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61 74 20  ge J+3 and that 
9b50: 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c  ptrmap page will
9b60: 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20 70 6f   provide back po
9b70: 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f  inter.informatio
9b80: 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b 34 20  n for pages J+4 
9b90: 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e  through 2*J+3 in
9ba0: 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20 73 6f  clusive.  And so
9bb0: 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65 20 65   forth for.the e
9bc0: 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 66  ntire database f
9bd0: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49  ile.</p>..<p>^(I
9be0: 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61  n a database tha
9bf0: 74 20 75 73 65 73 20 70 74 72 6d 61 70 20 70 61  t uses ptrmap pa
9c00: 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61  ges, all pages a
9c10: 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e  t locations iden
9c20: 74 69 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f  tified.by the co
9c30: 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65  mputation in the
9c40: 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
9c50: 61 70 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d  aph must be ptrm
9c60: 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f  ap page and no.o
9c70: 74 68 65 72 20 70 61 67 65 20 6d 61 79 20 62 65  ther page may be
9c80: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20   a ptrmap page. 
9c90: 20 45 78 63 65 70 74 2c 20 69 66 20 74 68 65 20   Except, if the 
9ca0: 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68  byte-lock page h
9cb0: 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f  appens to.fall o
9cc0: 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20  n the same page 
9cd0: 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d  number as a ptrm
9ce0: 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68  ap page, then th
9cf0: 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65  e ptrmap is move
9d00: 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d.to the followi
9d10: 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68 61 74  ng page for that
9d20: 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e   one case.)^</p>
9d30: 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65  ..<p>Each 5-byte
9d40: 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d   entry on a ptrm
9d50: 61 70 20 70 61 67 65 20 70 72 6f 76 69 64 65 73  ap page provides
9d60: 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72   back-link infor
9d70: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e  mation about .on
9d80: 65 20 6f 66 20 70 61 67 65 73 20 74 68 61 74 20  e of pages that 
9d90: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
9da0: 6f 77 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d  ow the pointer m
9db0: 61 70 2e 20 20 5e 28 49 66 20 70 61 67 65 20 42  ap.  ^(If page B
9dc0: 20 69 73 20 61 0a 70 74 72 6d 61 70 20 70 61 67   is a.ptrmap pag
9dd0: 65 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e 6b  e then back-link
9de0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
9df0: 75 74 20 70 61 67 65 20 42 2b 31 20 69 73 20 70  ut page B+1 is p
9e00: 72 6f 76 69 64 65 64 20 62 79 0a 74 68 65 20 66  rovided by.the f
9e10: 69 72 73 74 20 65 6e 74 72 79 20 6f 6e 20 74 68  irst entry on th
9e20: 65 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20  e pointer map.  
9e30: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
9e40: 74 20 70 61 67 65 20 42 2b 32 20 69 73 0a 70 72  t page B+2 is.pr
9e50: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 73 65  ovided by the se
9e60: 63 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e 64  cond entry.  And
9e70: 20 73 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70 3e   so forth.)^</p>
9e80: 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65  ..<p>Each 5-byte
9e90: 20 70 74 72 6d 61 70 20 65 6e 74 72 79 20 63 6f   ptrmap entry co
9ea0: 6e 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 62 79  nsists of one by
9eb0: 74 65 20 6f 66 20 22 70 61 67 65 20 74 79 70 65  te of "page type
9ec0: 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66 6f  " information.fo
9ed0: 6c 6c 6f 77 65 64 20 62 79 20 61 20 34 2d 62 79  llowed by a 4-by
9ee0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61  te big-endian pa
9ef0: 67 65 20 6e 75 6d 62 65 72 2e 20 20 46 69 76 65  ge number.  Five
9f00: 20 70 61 67 65 20 74 79 70 65 73 20 61 72 65 20   page types are 
9f10: 72 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70 3e  recognized:.</p>
9f20: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74  ..<ol>.<li>A b-t
9f30: 72 65 65 20 72 6f 6f 74 20 70 61 67 65 2e 20 20  ree root page.  
9f40: 54 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20  The.page number 
9f50: 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e 0a  should be zero..
9f60: 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70  <li>A freelist p
9f70: 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e  age.  The page n
9f80: 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 0a  umber should be.
9f90: 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66 69  zero..<li>The fi
9fa0: 72 73 74 20 70 61 67 65 20 6f 66 20 61 0a 63 65  rst page of a.ce
9fb0: 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66  ll payload overf
9fc0: 6c 6f 77 20 63 68 61 69 6e 2e 20 20 54 68 65 20  low chain.  The 
9fd0: 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74  page number is t
9fe0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74  he b-tree page t
9ff0: 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat.contains the
a000: 20 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e 74   cell whose cont
a010: 65 6e 74 20 68 61 73 20 6f 76 65 72 66 6c 6f 77  ent has overflow
a020: 65 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20 69  ed..<li>A page i
a030: 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68  n an overflow ch
a040: 61 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20 74  ain.other than t
a050: 68 65 20 66 69 72 73 74 20 70 61 67 65 2e 20 20  he first page.  
a060: 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  The page number 
a070: 69 73 20 74 68 65 20 70 72 69 6f 72 20 70 61 67  is the prior pag
a080: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
a090: 77 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20 6e  w chain..<li>A n
a0a0: 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  on-root b-tree p
a0b0: 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e  age.  The.page n
a0c0: 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 61 72  umber is the par
a0d0: 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ent b-tree page.
a0e0: 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61  .</ol>..<p>^In a
a0f0: 6e 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ny database file
a100: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 70   that contains p
a110: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c  trmap pages, all
a120: 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67   b-tree root pag
a130: 65 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62 65  es .must come be
a140: 66 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f  fore any non-roo
a150: 74 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 63  t b-tree page, c
a160: 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72  ell payload over
a170: 66 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66 72  flow page, or.fr
a180: 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68  eelist page.  Th
a190: 69 73 20 72 65 73 74 72 69 63 74 69 6f 6e 20 65  is restriction e
a1a0: 6e 73 75 72 65 73 20 74 68 61 74 20 61 20 72 6f  nsures that a ro
a1b0: 6f 74 20 70 61 67 65 20 77 69 6c 6c 20 6e 65 76  ot page will nev
a1c0: 65 72 0a 62 65 20 6d 6f 76 65 64 20 64 75 72 69  er.be moved duri
a1d0: 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  ng an auto-vacuu
a1e0: 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c  m or incremental
a1f0: 2d 76 61 63 75 75 6d 2e 20 20 54 68 65 20 61 75  -vacuum.  The au
a200: 74 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63 20  to-vacuum.logic 
a210: 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 68 6f  does not know ho
a220: 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65 20  w to update the 
a230: 72 6f 6f 74 5f 70 61 67 65 20 66 69 65 6c 64 20  root_page field 
a240: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  of the sqlite_ma
a250: 73 74 65 72 0a 74 61 62 6c 65 20 61 6e 64 20 73  ster.table and s
a260: 6f 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72  o it is necessar
a270: 79 20 74 6f 20 70 72 65 76 65 6e 74 20 72 6f 6f  y to prevent roo
a280: 74 20 70 61 67 65 73 20 66 72 6f 6d 20 62 65 69  t pages from bei
a290: 6e 67 20 6d 6f 76 65 64 0a 64 75 72 69 6e 67 20  ng moved.during 
a2a0: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 69  an auto-vacuum i
a2b0: 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 65 73 65  n order to prese
a2c0: 72 76 65 20 74 68 65 20 69 6e 74 65 67 72 69 74  rve the integrit
a2d0: 79 20 6f 66 20 74 68 65 0a 73 71 6c 69 74 65 5f  y of the.sqlite_
a2e0: 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20 20 5e  master table.  ^
a2f0: 52 6f 6f 74 20 70 61 67 65 73 20 61 72 65 20 6d  Root pages are m
a300: 6f 76 65 64 20 74 6f 20 74 68 65 20 62 65 67 69  oved to the begi
a310: 6e 6e 69 6e 67 20 6f 66 20 74 68 65 0a 64 61 74  nning of the.dat
a320: 61 62 61 73 65 20 66 69 6c 65 20 62 79 20 74 68  abase file by th
a330: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20  e CREATE TABLE, 
a340: 43 52 45 41 54 45 20 49 4e 44 45 58 2c 20 44 52  CREATE INDEX, DR
a350: 4f 50 20 54 41 42 4c 45 2c 20 61 6e 64 0a 44 52  OP TABLE, and.DR
a360: 4f 50 20 49 4e 44 45 58 20 6f 70 65 72 61 74 69  OP INDEX operati
a370: 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 32 2e  ons.</p>..<h2>2.
a380: 30 20 53 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f  0 Schema Layer</
a390: 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65  h2>..<p>The fore
a3a0: 67 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63 72  going text descr
a3b0: 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61  ibes low-level a
a3c0: 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 53 51  spects of the SQ
a3d0: 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74  Lite file.format
a3e0: 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d 65  .  The b-tree me
a3f0: 63 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65 73  chanism provides
a400: 20 61 20 70 6f 77 65 72 66 75 6c 20 61 6e 64 20   a powerful and 
a410: 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e 73 20  efficient means 
a420: 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61 20 6c  of.accessing a l
a430: 61 72 67 65 20 64 61 74 61 20 73 65 74 2e 20 20  arge data set.  
a440: 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77 69 6c  This section wil
a450: 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77 20 74  l describe how t
a460: 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74  he.low-level b-t
a470: 72 65 65 20 6c 61 79 65 72 20 69 73 20 75 73 65  ree layer is use
a480: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68  d to implement h
a490: 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a  igher-level SQL.
a4a0: 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70  capabilities.</p
a4b0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
a4c0: 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61  ent record_forma
a4d0: 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  t {record format
a4e0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e 31 20  }</tcl>.<h3>2.1 
a4f0: 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 68  Record Format</h
a500: 33 3e 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20  3>..<p>The data 
a510: 66 6f 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72  for a table b-tr
a520: 65 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e 64  ee leaf page and
a530: 20 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 20 69   the key.of an i
a540: 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65  ndex b-tree page
a550: 20 77 61 73 20 63 68 61 72 61 63 74 65 72 69 7a   was characteriz
a560: 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e 20 61  ed above.as an a
a570: 72 62 69 74 72 61 72 79 20 73 65 71 75 65 6e 63  rbitrary sequenc
a580: 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68 65 20  e of bytes..The 
a590: 70 72 69 6f 72 20 64 69 73 63 75 73 73 69 6f 6e  prior discussion
a5a0: 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65 20 6b   mentioned one k
a5b0: 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20 74 68  ey being less th
a5c0: 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75 74 0a  an another, but.
a5d0: 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65 20 77  did not define w
a5e0: 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e 22 20  hat "less than" 
a5f0: 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75 72 72  meant.  The curr
a600: 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c  ent section will
a610: 20 61 64 64 72 65 73 73 0a 74 68 65 73 65 20 6f   address.these o
a620: 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c  missions.</p>..<
a630: 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69 74 68 65  p>Payload, eithe
a640: 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 64  r table b-tree d
a650: 61 74 61 20 6f 72 20 69 6e 64 65 78 20 62 2d 74  ata or index b-t
a660: 72 65 65 20 6b 65 79 73 2c 20 0a 69 73 20 61 6c  ree keys, .is al
a670: 77 61 79 73 20 69 6e 20 74 68 65 20 22 72 65 63  ways in the "rec
a680: 6f 72 64 20 66 6f 72 6d 61 74 22 2e 0a 54 68 65  ord format"..The
a690: 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 64   record format d
a6a0: 65 66 69 6e 65 73 20 61 20 73 65 71 75 65 6e 63  efines a sequenc
a6b0: 65 20 6f 66 20 76 61 6c 75 65 73 20 63 6f 72 72  e of values corr
a6c0: 65 73 70 6f 6e 64 69 6e 67 0a 74 6f 20 63 6f 6c  esponding.to col
a6d0: 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20  umns in a table 
a6e0: 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65 20 72  or index.  The r
a6f0: 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 73 70 65  ecord format spe
a700: 63 69 66 69 65 73 20 74 68 65 20 6e 75 6d 62 65  cifies the numbe
a710: 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 74 68  r.of columns, 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 6e 64 20 74  ch column, and t
a740: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61  he content of ea
a750: 63 68 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a  ch column.</p>..
a760: 3c 70 3e 54 68 65 20 72 65 63 6f 72 64 20 66 6f  <p>The record fo
a770: 72 6d 61 74 20 6d 61 6b 65 73 20 65 78 74 65 6e  rmat makes exten
a780: 73 69 76 65 20 75 73 65 20 6f 66 20 74 68 65 20  sive use of the 
a790: 0a 5b 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  .[variable-lengt
a7a0: 68 20 69 6e 74 65 67 65 72 5d 20 6f 72 20 5b 76  h integer] or [v
a7b0: 61 72 69 6e 74 5d 0a 72 65 70 72 65 73 65 6e 74  arint].represent
a7c0: 61 74 69 6f 6e 20 6f 66 20 36 34 2d 62 69 74 20  ation of 64-bit 
a7d0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 20  signed integers 
a7e0: 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 3c 2f  defined above.</
a7f0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
a800: 6d 65 6e 74 20 73 65 72 69 61 6c 74 79 70 65 20  ment serialtype 
a810: 7b 73 65 72 69 61 6c 20 74 79 70 65 7d 20 7b 73  {serial type} {s
a820: 65 72 69 61 6c 20 74 79 70 65 73 7d 3c 2f 74 63  erial types}</tc
a830: 6c 3e 0a 3c 70 3e 41 20 72 65 63 6f 72 64 20 63  l>.<p>A record c
a840: 6f 6e 74 61 69 6e 73 20 61 20 68 65 61 64 65 72  ontains a header
a850: 20 61 6e 64 20 61 20 62 6f 64 79 2c 20 69 6e 20   and a body, in 
a860: 74 68 61 74 20 6f 72 64 65 72 2e 20 20 0a 5e 28  that order.  .^(
a870: 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e  The header begin
a880: 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  s with a single 
a890: 76 61 72 69 6e 74 20 77 68 69 63 68 20 64 65 74  varint which det
a8a0: 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61  ermines the tota
a8b0: 6c 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65  l number.of byte
a8c0: 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e  s in the header.
a8d0: 20 20 54 68 65 20 76 61 72 69 6e 74 20 76 61 6c    The varint val
a8e0: 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f  ue is the size o
a8f0: 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 0a  f the header in.
a900: 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20  bytes including 
a910: 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20  the size varint 
a920: 69 74 73 65 6c 66 2e 29 5e 20 20 5e 46 6f 6c 6c  itself.)^  ^Foll
a930: 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
a940: 61 72 69 6e 74 20 61 72 65 0a 6f 6e 65 20 6f 72  arint are.one or
a950: 20 6d 6f 72 65 20 61 64 64 69 74 69 6f 6e 61 6c   more additional
a960: 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65   varints, one pe
a970: 72 20 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 73 65  r column.  These
a980: 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69   additional vari
a990: 6e 74 73 0a 61 72 65 20 63 61 6c 6c 65 64 20 22  nts.are called "
a9a0: 73 65 72 69 61 6c 20 74 79 70 65 22 20 6e 75 6d  serial type" num
a9b0: 62 65 72 73 20 61 6e 64 0a 64 65 74 65 72 6d 69  bers and.determi
a9c0: 6e 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20  ne the datatype 
a9d0: 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c 20  of each column, 
a9e0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
a9f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74   following chart
aa00: 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
aa10: 3c 69 3e 53 65 72 69 61 6c 20 54 79 70 65 20 43  <i>Serial Type C
aa20: 6f 64 65 73 20 4f 66 20 54 68 65 20 52 65 63 6f  odes Of The Reco
aa30: 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  rd Format</i><br
aa40: 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
aa50: 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  80%" border=1>.<
aa60: 74 72 3e 3c 74 68 3e 53 65 72 69 61 6c 20 54 79  tr><th>Serial Ty
aa70: 70 65 3c 74 68 3e 43 6f 6e 74 65 6e 74 20 53 69  pe<th>Content Si
aa80: 7a 65 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74  ze<th>Meaning.<t
aa90: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
aaa0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c   align=center>0<
aab0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
aac0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
aad0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
aae0: 75 65 20 69 73 20 61 20 4e 55 4c 4c 2e 0a 3c 74  ue is a NULL..<t
aaf0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
ab00: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
ab10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
ab20: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
ab30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
ab40: 75 65 20 69 73 20 61 6e 20 38 2d 62 69 74 20 74  ue is an 8-bit t
ab50: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
ab60: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
ab70: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
ab80: 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c  =center>2<td val
ab90: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
aba0: 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  nter>2<td align=
abb0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
abc0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 31 36 2d  a big-endian 16-
abd0: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
abe0: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
abf0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
ac00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74  align=center>3<t
ac10: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
ac20: 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20 61  gn=center>3<td a
ac30: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
ac40: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
ac50: 6e 20 32 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 24-bit twos-co
ac60: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
ac70: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
ac80: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ac90: 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>4<td valign=to
aca0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
acb0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
acc0: 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d  ^Value is a big-
acd0: 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 74 77  endian 32-bit tw
ace0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
acf0: 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76  teger..<tr><td v
ad00: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ad10: 63 65 6e 74 65 72 3e 35 3c 74 64 20 76 61 6c 69  center>5<td vali
ad20: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ad30: 74 65 72 3e 36 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>6<td align=l
ad40: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
ad50: 20 62 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d 62   big-endian 48-b
ad60: 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65  it twos-compleme
ad70: 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e  nt integer..<tr>
ad80: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ad90: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64  lign=center>6<td
ada0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
adb0: 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61 6c  n=center>8<td al
adc0: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65  ign=left>.^Value
add0: 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e   is a big-endian
ade0: 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   64-bit twos-com
adf0: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e  plement integer.
ae00: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
ae10: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
ae20: 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >7<td valign=top
ae30: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c   align=center>8<
ae40: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
ae50: 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65  Value is a big-e
ae60: 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d 32  ndian IEEE 754-2
ae70: 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  008 64-bit float
ae80: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
ae90: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
aea0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
aeb0: 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>8<td valign=to
aec0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
aed0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
aee0: 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69 6e  ^Value is the in
aef0: 74 65 67 65 72 20 30 2e 20 28 4f 6e 6c 79 20 61  teger 0. (Only a
af00: 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73 63  vailable for [sc
af10: 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20 61  hema format] 4 a
af20: 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72 3e  nd higher.).<tr>
af30: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
af40: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 3c 74 64  lign=center>9<td
af50: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
af60: 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c  n=center>0<td al
af70: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65  ign=left>.^Value
af80: 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20   is the integer 
af90: 31 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c 61 62  1. (Only availab
afa0: 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d 61 20 66  le for [schema f
afb0: 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20 68 69 67  ormat] 4 and hig
afc0: 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20 76 61  her.).<tr><td va
afd0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
afe0: 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20 20  enter>10,11.    
aff0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b000: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62 73  lign=center>&nbs
b010: 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  p;<td align=left
b020: 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20 20  >.<i>Not used.  
b030: 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78 70  Reserved for exp
b040: 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e  ansion.</i>.<tr>
b050: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b060: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78  lign=center>N&#x
b070: 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76 65 6e  2265;12 and even
b080: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
b090: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
b0a0: 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c 69  >(N-12)/2<td ali
b0b0: 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20  gn=left>.^Value 
b0c0: 69 73 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69  is a BLOB that i
b0d0: 73 20 28 4e 2d 31 32 29 2f 32 20 62 79 74 65 73  s (N-12)/2 bytes
b0e0: 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 3c 74 72 3e   in length..<tr>
b0f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b100: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78  lign=center>N&#x
b110: 32 32 36 35 3b 31 33 20 61 6e 64 20 6f 64 64 0a  2265;13 and odd.
b120: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
b130: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b140: 28 4e 2d 31 33 29 2f 32 3c 74 64 20 61 6c 69 67  (N-13)/2<td alig
b150: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
b160: 73 20 61 20 73 74 72 69 6e 67 20 69 6e 20 74 68  s a string in th
b170: 65 20 5b 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  e [text encoding
b180: 5d 20 61 6e 64 20 28 4e 2d 31 33 29 2f 32 20 62  ] and (N-13)/2 b
b190: 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a  ytes in length..
b1a0: 5e 54 68 65 20 6e 75 6c 20 74 65 72 6d 69 6e 61  ^The nul termina
b1b0: 74 6f 72 20 69 73 20 6e 6f 74 20 73 74 6f 72 65  tor is not store
b1c0: 64 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e  d..</table></cen
b1d0: 74 65 72 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68  ter>..<p>Note th
b1e0: 61 74 20 62 65 63 61 75 73 65 20 6f 66 20 74 68  at because of th
b1f0: 65 20 77 61 79 20 76 61 72 69 6e 74 73 20 61 72  e way varints ar
b200: 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20 68  e defined, the h
b210: 65 61 64 65 72 20 73 69 7a 65 20 76 61 72 69 6e  eader size varin
b220: 74 0a 61 6e 64 20 73 65 72 69 61 6c 20 74 79 70  t.and serial typ
b230: 65 20 76 61 72 69 6e 74 73 20 77 69 6c 6c 20 75  e varints will u
b240: 73 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74 20 6f  sually consist o
b250: 66 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e  f a single byte.
b260: 20 20 54 68 65 0a 73 65 72 69 61 6c 20 74 79 70    The.serial typ
b270: 65 20 76 61 72 69 6e 74 73 20 66 6f 72 20 6c 61  e varints for la
b280: 72 67 65 20 73 74 72 69 6e 67 73 20 61 6e 64 20  rge strings and 
b290: 42 4c 4f 42 73 20 6d 69 67 68 74 20 65 78 74 65  BLOBs might exte
b2a0: 6e 64 20 74 6f 20 74 77 6f 20 6f 72 20 74 68 72  nd to two or thr
b2b0: 65 65 0a 62 79 74 65 20 76 61 72 69 6e 74 73 2c  ee.byte varints,
b2c0: 20 62 75 74 20 74 68 61 74 20 69 73 20 74 68 65   but that is the
b2d0: 20 65 78 63 65 70 74 69 6f 6e 20 72 61 74 68 65   exception rathe
b2e0: 72 20 74 68 61 6e 20 74 68 65 20 72 75 6c 65 2e  r than the rule.
b2f0: 20 0a 54 68 65 20 76 61 72 69 6e 74 20 66 6f 72   .The varint for
b300: 6d 61 74 20 69 73 20 76 65 72 79 20 65 66 66 69  mat is very effi
b310: 63 69 65 6e 74 20 61 74 20 63 6f 64 69 6e 67 20  cient at coding 
b320: 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
b330: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r.</p>..<p>^The 
b340: 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20  values for each 
b350: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65  column in the re
b360: 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  cord immediately
b370: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64   follow the head
b380: 65 72 2e 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20  er..^(Note that 
b390: 66 6f 72 20 73 65 72 69 61 6c 20 74 79 70 65 73  for serial types
b3a0: 20 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e   0, 8, 9, 12, an
b3b0: 64 20 31 33 2c 20 74 68 65 20 76 61 6c 75 65 20  d 13, the value 
b3c0: 69 73 20 7a 65 72 6f 20 62 79 74 65 73 20 69 6e  is zero bytes in
b3d0: 0a 6c 65 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c  .length.  If all
b3e0: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20   columns are of 
b3f0: 74 68 65 73 65 20 74 79 70 65 73 20 74 68 65 6e  these types then
b400: 20 74 68 65 20 62 6f 64 79 20 73 65 63 74 69 6f   the body sectio
b410: 6e 20 6f 66 20 74 68 65 0a 72 65 63 6f 72 64 20  n of the.record 
b420: 69 73 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a  is empty.)^</p>.
b430: 0a 3c 68 33 3e 32 2e 32 20 52 65 63 6f 72 64 20  .<h3>2.2 Record 
b440: 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68 33 3e 0a  Sort Order</h3>.
b450: 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72 20 6f 66  .<p>The order of
b460: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
b470: 78 20 62 2d 74 72 65 65 20 69 73 20 64 65 74 65  x b-tree is dete
b480: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 73 6f  rmined by the so
b490: 72 74 20 6f 72 64 65 72 20 6f 66 0a 74 68 65 20  rt order of.the 
b4a0: 72 65 63 6f 72 64 73 20 74 68 61 74 20 74 68 65  records that the
b4b0: 20 6b 65 79 73 20 72 65 70 72 65 73 65 6e 74 2e   keys represent.
b4c0: 20 20 52 65 63 6f 72 64 20 63 6f 6d 70 61 72 69    Record compari
b4d0: 73 6f 6e 20 70 72 6f 67 72 65 73 73 65 73 20 63  son progresses c
b4e0: 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e  olumn.by column.
b4f0: 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 72    Columns of a r
b500: 65 63 6f 72 64 20 61 72 65 20 65 78 61 6d 69 6e  ecord are examin
b510: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
b520: 72 69 67 68 74 2e 20 20 54 68 65 0a 66 69 72 73  right.  The.firs
b530: 74 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e  t pair of column
b540: 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 65  s that are not e
b550: 71 75 61 6c 20 64 65 74 65 72 6d 69 6e 65 73 20  qual determines 
b560: 74 68 65 20 72 65 6c 61 74 69 76 65 20 6f 72 64  the relative ord
b570: 65 72 0a 6f 66 20 74 68 65 20 74 77 6f 20 72 65  er.of the two re
b580: 63 6f 72 64 73 2e 20 20 54 68 65 20 73 6f 72 74  cords.  The sort
b590: 20 6f 72 64 65 72 20 6f 66 20 69 6e 64 69 76 69   order of indivi
b5a0: 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73 20  dual columns is 
b5b0: 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as.follows:</p>.
b5c0: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c  .<ol>.<li>^(NULL
b5d0: 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20   values (serial 
b5e0: 74 79 70 65 20 30 29 20 73 6f 72 74 20 66 69 72  type 0) sort fir
b5f0: 73 74 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d 65  st.)^.<li>^(Nume
b600: 72 69 63 20 76 61 6c 75 65 73 20 28 73 65 72 69  ric values (seri
b610: 61 6c 20 74 79 70 65 73 20 31 20 74 68 72 6f 75  al types 1 throu
b620: 67 68 20 39 29 20 73 6f 72 74 20 61 66 74 65 72  gh 9) sort after
b630: 20 4e 55 4c 4c 73 0a 20 20 20 20 20 20 61 6e 64   NULLs.      and
b640: 20 69 6e 20 6e 75 6d 65 72 69 63 20 6f 72 64 65   in numeric orde
b650: 72 2e 29 5e 0a 3c 6c 69 3e 5e 28 54 65 78 74 20  r.)^.<li>^(Text 
b660: 76 61 6c 75 65 73 20 28 6f 64 64 20 73 65 72 69  values (odd seri
b670: 61 6c 20 74 79 70 65 73 20 31 33 20 61 6e 64 20  al types 13 and 
b680: 6c 61 72 67 65 72 29 20 73 6f 72 74 20 61 66 74  larger) sort aft
b690: 65 72 20 6e 75 6d 65 72 69 63 0a 20 20 20 20 76  er numeric.    v
b6a0: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6f 72 64  alues in the ord
b6b0: 65 72 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  er determined by
b6c0: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f   the columns [co
b6d0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
b6e0: 5d 2e 29 5e 0a 3c 6c 69 3e 5e 28 42 4c 4f 42 20  ].)^.<li>^(BLOB 
b6f0: 76 61 6c 75 65 73 20 28 65 76 65 6e 20 73 65 72  values (even ser
b700: 69 61 6c 20 74 79 70 65 73 20 31 32 20 61 6e 64  ial types 12 and
b710: 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20 6c 61   larger) sort la
b720: 73 74 20 61 6e 64 20 69 6e 20 74 68 65 20 6f 72  st and in the or
b730: 64 65 72 20 0a 20 20 20 20 64 65 74 65 72 6d 69  der .    determi
b740: 6e 65 64 20 62 79 20 6d 65 6d 63 6d 70 28 29 2e  ned by memcmp().
b750: 29 5e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b  )^.</ol>..<p>A [
b760: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
b770: 6f 6e 5d 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  on] for each col
b780: 75 6d 6e 20 69 73 20 6e 65 63 65 73 73 61 72 79  umn is necessary
b790: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d   in order to com
b7a0: 70 75 74 65 0a 74 68 65 20 6f 72 64 65 72 20 6f  pute.the order o
b7b0: 66 20 74 65 78 74 20 66 69 65 6c 64 73 2e 0a 5e  f text fields..^
b7c0: 28 53 51 4c 69 74 65 20 64 65 66 69 6e 65 73 20  (SQLite defines 
b7d0: 74 68 72 65 65 20 62 75 69 6c 74 2d 69 6e 20 63  three built-in c
b7e0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
b7f0: 6e 73 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ns:)^.</p>..<blo
b800: 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62  ckquote><table b
b810: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73 70 61 63  order=0 cellspac
b820: 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 3c 74 64 20  ing=10>.<tr><td 
b830: 76 61 6c 69 67 6e 3d 74 6f 70 3e 42 49 4e 41 52  valign=top>BINAR
b840: 59 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54 68 65  Y.    <td> ^(The
b850: 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59   built-in BINARY
b860: 20 63 6f 6c 6c 61 74 69 6f 6e 20 63 6f 6d 70 61   collation compa
b870: 72 65 73 20 73 74 72 69 6e 67 73 20 62 79 74 65  res strings byte
b880: 20 62 79 20 62 79 74 65 0a 20 20 20 20 20 20 20   by byte.       
b890: 20 75 73 69 6e 67 20 74 68 65 20 6d 65 6d 63 6d   using the memcm
b8a0: 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  p() function.   
b8b0: 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 73 74       from the st
b8c0: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
b8d0: 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  .)^.<tr><td vali
b8e0: 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20 20  gn=top>NOCASE.  
b8f0: 20 20 3c 74 64 3e 20 5e 28 54 68 65 20 4e 4f 43    <td> ^(The NOC
b900: 41 53 45 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73  ASE collation is
b910: 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63   like BINARY exc
b920: 65 70 74 20 74 68 61 74 20 75 70 70 65 72 63 61  ept that upperca
b930: 73 65 0a 20 20 20 20 20 20 20 20 41 53 43 49 49  se.        ASCII
b940: 20 63 68 61 72 61 63 74 65 72 73 20 28 27 41 27   characters ('A'
b950: 20 74 68 72 6f 75 67 68 20 27 5a 27 29 0a 20 20   through 'Z').  
b960: 20 20 20 20 20 20 61 72 65 20 66 6f 6c 64 65 64        are folded
b970: 20 69 6e 74 6f 20 74 68 65 69 72 20 6c 6f 77 65   into their lowe
b980: 72 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74  rcase equivalent
b990: 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69  s prior to runni
b9a0: 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20 20 63  ng the.        c
b9b0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4e 6f 74 65  omparison.  Note
b9c0: 20 74 68 61 74 20 6f 6e 6c 79 20 41 53 43 49 49   that only ASCII
b9d0: 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
b9e0: 63 61 73 65 2d 66 6f 6c 64 65 64 2e 29 5e 0a 20  case-folded.)^. 
b9f0: 20 20 20 20 20 20 20 5e 28 4e 4f 43 41 53 45 0a         ^(NOCASE.
ba00: 20 20 20 20 20 20 20 20 64 6f 65 73 20 6e 6f 74          does not
ba10: 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 67 65 6e   implement a gen
ba20: 65 72 61 6c 20 70 75 72 70 6f 73 65 20 75 6e 69  eral purpose uni
ba30: 63 6f 64 65 20 63 61 73 65 6c 65 73 73 20 63 6f  code caseless co
ba40: 6d 70 61 72 69 73 6f 6e 2e 29 5e 0a 3c 74 72 3e  mparison.)^.<tr>
ba50: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 52  <td valign=top>R
ba60: 54 52 49 4d 0a 20 20 20 20 3c 74 64 3e 20 5e 28  TRIM.    <td> ^(
ba70: 52 54 52 49 4d 20 69 73 20 6c 69 6b 65 20 42 49  RTRIM is like BI
ba80: 4e 41 52 59 20 65 78 63 65 70 74 20 74 68 61 74  NARY except that
ba90: 20 65 78 74 72 61 20 73 70 61 63 65 73 20 61 74   extra spaces at
baa0: 20 74 68 65 20 65 6e 64 20 6f 66 20 65 69 74 68   the end of eith
bab0: 65 72 0a 20 20 20 20 20 20 20 20 20 73 74 72 69  er.         stri
bac0: 6e 67 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ng do not change
bad0: 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 49 6e   the result.  In
bae0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 73 74   other words, st
baf0: 72 69 6e 67 73 20 77 69 6c 6c 0a 20 20 20 20 20  rings will.     
bb00: 20 20 20 20 63 6f 6d 70 61 72 65 20 65 71 75 61      compare equa
bb10: 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72  l to one another
bb20: 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 79   as long as they
bb30: 0a 20 20 20 20 20 20 20 20 20 64 69 66 66 65 72  .         differ
bb40: 20 6f 6e 6c 79 20 69 6e 20 74 68 65 20 6e 75 6d   only in the num
bb50: 62 65 72 20 6f 66 20 73 70 61 63 65 73 20 61 74  ber of spaces at
bb60: 20 74 68 65 20 65 6e 64 2e 29 5e 0a 3c 2f 74 61   the end.)^.</ta
bb70: 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ble></blockquote
bb80: 3e 0a 0a 3c 70 3e 5e 41 64 64 69 74 69 6f 6e 61  >..<p>^Additiona
bb90: 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73 70  l application-sp
bba0: 65 63 69 66 69 63 20 63 6f 6c 6c 61 74 69 6e 67  ecific collating
bbb0: 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62   functions can b
bbc0: 65 20 61 64 64 65 64 20 74 6f 0a 53 51 4c 69 74  e added to.SQLit
bbd0: 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c  e using the [sql
bbe0: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
bbf0: 61 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61  ation()] interfa
bc00: 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  ce.</p>..<p>^The
bc10: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
bc20: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ng function for 
bc30: 61 6c 6c 20 73 74 72 69 6e 67 73 20 69 73 20 42  all strings is B
bc40: 49 4e 41 52 59 2e 0a 5e 41 6c 74 65 72 6e 61 74  INARY..^Alternat
bc50: 69 76 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ive collating fu
bc60: 6e 63 74 69 6f 6e 73 20 66 6f 72 20 74 61 62 6c  nctions for tabl
bc70: 65 20 63 6f 6c 75 6d 6e 73 20 63 61 6e 20 62 65  e columns can be
bc80: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
bc90: 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
bca0: 20 73 74 61 74 65 6d 65 6e 74 20 75 73 69 6e 67   statement using
bcb0: 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61   the COLLATE cla
bcc0: 75 73 65 20 6f 6e 20 74 68 65 20 5b 63 6f 6c 75  use on the [colu
bcd0: 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a  mn definition]..
bce0: 5e 57 68 65 6e 20 61 20 63 6f 6c 75 6d 6e 20 69  ^When a column i
bcf0: 73 20 69 6e 64 65 78 65 64 2c 20 74 68 65 20 73  s indexed, the s
bd00: 61 6d 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ame collating fu
bd10: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
bd20: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
bd30: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
bd40: 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 65   is used for the
bd50: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 69   column in the i
bd60: 6e 64 65 78 2c 20 62 79 20 64 65 66 61 75 6c 74  ndex, by default
bd70: 2c 0a 74 68 6f 75 67 68 20 74 68 69 73 20 63 61  ,.though this ca
bd80: 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20  n be overridden 
bd90: 75 73 69 6e 67 20 61 20 43 4f 4c 4c 41 54 45 20  using a COLLATE 
bda0: 63 6c 61 75 73 65 20 69 6e 20 74 68 65 20 0a 5b  clause in the .[
bdb0: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74  CREATE INDEX] st
bdc0: 61 74 65 6d 65 6e 74 2e 0a 0a 3c 68 33 3e 32 2e  atement...<h3>2.
bdd0: 33 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  3 Representation
bde0: 20 4f 66 20 53 51 4c 20 54 61 62 6c 65 73 3c 2f   Of SQL Tables</
bdf0: 68 33 3e 0a 0a 3c 70 3e 20 5e 45 61 63 68 20 6f  h3>..<p> ^Each o
be00: 72 64 69 6e 61 72 79 20 53 51 4c 20 74 61 62 6c  rdinary SQL tabl
be10: 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
be20: 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 70 72  e schema is repr
be30: 65 73 65 6e 74 65 64 20 6f 6e 2d 64 69 73 6b 0a  esented on-disk.
be40: 62 79 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  by a table b-tre
be50: 65 2e 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20  e.  ^Each entry 
be60: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
be70: 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ree corresponds 
be80: 74 6f 20 61 20 72 6f 77 0a 6f 66 20 74 68 65 20  to a row.of the 
be90: 53 51 4c 20 74 61 62 6c 65 2e 20 20 5e 54 68 65  SQL table.  ^The
bea0: 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20   [rowid] of the 
beb0: 53 51 4c 20 74 61 62 6c 65 20 69 73 20 74 68 65  SQL table is the
bec0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 0a 69   64-bit signed.i
bed0: 6e 74 65 67 65 72 20 6b 65 79 20 66 6f 72 20 65  nteger key for e
bee0: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ach entry in the
bef0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 3c 2f   table b-tree.</
bf00: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63 6f 6e  p>..<p> ^The con
bf10: 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53 51 4c  tent of each SQL
bf20: 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 73 74   table row is st
bf30: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
bf40: 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66 69 72  base file by.fir
bf50: 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65  st combining the
bf60: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 76   values in the v
bf70: 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73 20 69  arious columns i
bf80: 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72 61 79  nto a byte array
bf90: 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 66  .in the record f
bfa0: 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74 6f 72  ormat, then stor
bfb0: 69 6e 67 20 74 68 61 74 20 62 79 74 65 20 61 72  ing that byte ar
bfc0: 72 61 79 20 61 73 20 74 68 65 20 70 61 79 6c 6f  ray as the paylo
bfd0: 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79 20 69  ad in.an entry i
bfe0: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
bff0: 65 65 2e 20 20 5e 54 68 65 20 6f 72 64 65 72 20  ee.  ^The order 
c000: 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  of values in the
c010: 20 72 65 63 6f 72 64 20 69 73 0a 74 68 65 20 73   record is.the s
c020: 61 6d 65 20 61 73 20 74 68 65 20 6f 72 64 65 72  ame as the order
c030: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
c040: 68 65 20 53 51 4c 20 74 61 62 6c 65 20 64 65 66  he SQL table def
c050: 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e 20 61  inition..^When a
c060: 6e 20 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74  n SQL table that
c070: 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e   includes an.[IN
c080: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c090: 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68  Y] column (which
c0a0: 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72 6f   aliases the [ro
c0b0: 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74 0a  wid]) then that.
c0c0: 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 69  column appears i
c0d0: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 73 20  n the record as 
c0e0: 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20 5e  a NULL value.  ^
c0f0: 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77 61  SQLite will alwa
c100: 79 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c 65  ys use.the table
c110: 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74 68   b-tree key rath
c120: 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c  er than the NULL
c130: 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66 65   value when refe
c140: 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54  rencing the.[INT
c150: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
c160: 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c  ] column.</p>..<
c170: 70 3e 20 5e 49 66 20 74 68 65 20 5b 61 66 66 69  p> ^If the [affi
c180: 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  nity] of a colum
c190: 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74 68  n is REAL and th
c1a0: 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  at column contai
c1b0: 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74 20  ns a.value that 
c1c0: 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65 64  can be converted
c1d0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77   to an integer w
c1e0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
c1f0: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74  nformation.(if t
c200: 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  he value contain
c210: 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20  s no fractional 
c220: 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74 20  part and is not 
c230: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 0a  too large to be.
c240: 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  represented as a
c250: 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e 20  n integer) then 
c260: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62  the column may b
c270: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
c280: 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74  record.as an int
c290: 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20 77  eger.  ^SQLite w
c2a0: 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65 20  ill convert the 
c2b0: 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66 6c  value back to fl
c2c0: 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65  oating.point whe
c2d0: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74 20  n extracting it 
c2e0: 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 2e  from the record.
c2f0: 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 34 20 52 65  </p>..<h3>2.4 Re
c300: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
c310: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 54 61  WITHOUT ROWID Ta
c320: 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 49  bles</h3>..<p>^I
c330: 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
c340: 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
c350: 74 68 65 20 22 57 49 54 48 4f 55 54 20 52 4f 57  the "WITHOUT ROW
c360: 49 44 22 20 63 6c 61 75 73 65 20 61 74 20 74 68  ID" clause at th
c370: 65 0a 65 6e 64 20 6f 66 20 69 74 73 20 43 52 45  e.end of its CRE
c380: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
c390: 65 6e 74 2c 20 74 68 65 6e 20 74 68 61 74 20 74  ent, then that t
c3a0: 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f  able is a [WITHO
c3b0: 55 54 20 52 4f 57 49 44 5d 0a 74 61 62 6c 65 20  UT ROWID].table 
c3c0: 61 6e 64 20 75 73 65 73 20 61 20 64 69 66 66 65  and uses a diffe
c3d0: 72 65 6e 74 20 6f 6e 2d 64 69 73 6b 20 72 65 70  rent on-disk rep
c3e0: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 5e 41  resentation.  ^A
c3f0: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a 74   WITHOUT ROWID.t
c400: 61 62 6c 65 20 75 73 65 73 20 61 6e 20 69 6e 64  able uses an ind
c410: 65 78 20 62 2d 74 72 65 65 20 72 61 74 68 65 72  ex b-tree rather
c420: 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62 2d   than a table b-
c430: 74 72 65 65 20 66 6f 72 20 73 74 6f 72 61 67 65  tree for storage
c440: 2e 0a 5e 54 68 65 20 6b 65 79 20 66 6f 72 20 65  ..^The key for e
c450: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ach entry in the
c460: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 62   WITHOUT ROWID b
c470: 2d 74 72 65 65 20 69 73 20 61 20 72 65 63 6f 72  -tree is a recor
c480: 64 20 63 6f 6d 70 6f 73 65 64 0a 6f 66 20 74 68  d composed.of th
c490: 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
c4a0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 6c   PRIMARY KEY fol
c4b0: 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 72 65 6d  lowed by all rem
c4c0: 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f  aining columns o
c4d0: 66 0a 74 68 65 20 74 61 62 6c 65 2e 20 20 5e 54  f.the table.  ^T
c4e0: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63  he primary key c
c4f0: 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69 6e  olumns appear in
c500: 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20   the order they 
c510: 74 68 65 79 20 77 65 72 65 0a 64 65 63 6c 61 72  they were.declar
c520: 65 64 20 69 6e 20 74 68 65 20 50 52 49 4d 41 52  ed in the PRIMAR
c530: 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61 6e 64  Y KEY clause and
c540: 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63   the remaining c
c550: 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69 6e  olumns appear in
c560: 0a 74 68 65 20 6f 72 64 65 72 20 74 68 65 79 20  .the order they 
c570: 6f 63 63 75 72 20 69 6e 20 74 68 65 20 43 52 45  occur in the CRE
c580: 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d  ATE TABLE statem
c590: 65 6e 74 2e 0a 0a 3c 70 3e 5e 48 65 6e 63 65 2c  ent...<p>^Hence,
c5a0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63   the content enc
c5b0: 6f 64 69 6e 67 20 66 6f 72 20 61 20 57 49 54 48  oding for a WITH
c5c0: 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 20  OUT ROWID table 
c5d0: 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74  is the same.as t
c5e0: 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64  he content encod
c5f0: 69 6e 67 20 66 6f 72 20 61 6e 20 6f 72 64 69 6e  ing for an ordin
c600: 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65 2c  ary rowid table,
c610: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
c620: 0a 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f  .order of the co
c630: 6c 75 6d 6e 73 20 69 73 20 72 65 61 72 72 61 6e  lumns is rearran
c640: 67 65 64 20 73 6f 20 74 68 61 74 20 50 52 49 4d  ged so that PRIM
c650: 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20  ARY KEY columns 
c660: 63 6f 6d 65 0a 66 69 72 73 74 2c 20 61 6e 64 20  come.first, and 
c670: 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 75  the content is u
c680: 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 69  sed as the key i
c690: 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  n an index b-tre
c6a0: 65 20 72 61 74 68 65 72 0a 74 68 61 6e 20 61 73  e rather.than as
c6b0: 20 74 68 65 20 64 61 74 61 20 69 6e 20 61 20 74   the data in a t
c6c0: 61 62 6c 65 20 62 2d 74 72 65 65 2e 0a 5e 54 68  able b-tree..^Th
c6d0: 65 20 73 70 65 63 69 61 6c 20 65 6e 63 6f 64 69  e special encodi
c6e0: 6e 67 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 6c  ng rules for col
c6f0: 75 6d 6e 73 20 77 69 74 68 20 52 45 41 4c 20 61  umns with REAL a
c700: 66 66 69 6e 69 74 79 0a 61 70 70 6c 79 20 74 6f  ffinity.apply to
c710: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
c720: 61 62 6c 65 73 20 74 68 65 20 73 61 6d 65 20 61  ables the same a
c730: 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20 72  s they do with r
c740: 6f 77 69 64 20 74 61 62 6c 65 73 2e 0a 0a 3c 68  owid tables...<h
c750: 33 3e 32 2e 35 20 52 65 70 72 65 73 65 6e 74 61  3>2.5 Representa
c760: 74 69 6f 6e 20 4f 66 20 53 51 4c 20 49 6e 64 69  tion Of SQL Indi
c770: 63 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 61  ces</h3>..<p>^Ea
c780: 63 68 20 53 51 4c 20 69 6e 64 65 78 2c 20 77 68  ch SQL index, wh
c790: 65 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c 79  ether explicitly
c7a0: 20 64 65 63 6c 61 72 65 64 20 76 69 61 20 61 20   declared via a 
c7b0: 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73  [CREATE INDEX] s
c7c0: 74 61 74 65 6d 65 6e 74 0a 6f 72 20 69 6d 70 6c  tatement.or impl
c7d0: 69 65 64 20 62 79 20 61 20 55 4e 49 51 55 45 20  ied by a UNIQUE 
c7e0: 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  or PRIMARY KEY c
c7f0: 6f 6e 73 74 72 61 69 6e 74 2c 20 63 6f 72 72 65  onstraint, corre
c800: 73 70 6f 6e 64 73 20 74 6f 20 61 6e 20 0a 69 6e  sponds to an .in
c810: 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74 68  dex b-tree in th
c820: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
c830: 0a 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20  .^Each entry in 
c840: 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65  the index b-tree
c850: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
c860: 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e 20  a single row in 
c870: 74 68 65 20 0a 61 73 73 6f 63 69 61 74 65 64 20  the .associated 
c880: 53 51 4c 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20  SQL table..^The 
c890: 6b 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78 20  key to an index 
c8a0: 62 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63 6f  b-tree is.a reco
c8b0: 72 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74  rd composed of t
c8c0: 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  he columns that 
c8d0: 61 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  are being indexe
c8e0: 64 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68  d followed by th
c8f0: 65 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f 72  e.key of the cor
c900: 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
c910: 20 72 6f 77 2e 20 20 46 6f 72 20 6f 72 64 69 6e   row.  For ordin
c920: 61 72 79 20 74 61 62 6c 65 73 2c 20 74 68 65 20  ary tables, the 
c930: 72 6f 77 20 6b 65 79 20 69 73 0a 74 68 65 20 5b  row key is.the [
c940: 72 6f 77 69 64 5d 2c 20 61 6e 64 20 66 6f 72 20  rowid], and for 
c950: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
c960: 74 61 62 6c 65 73 20 74 68 65 20 72 6f 77 20 6b  tables the row k
c970: 65 79 20 69 73 20 74 68 65 20 50 52 49 4d 41 52  ey is the PRIMAR
c980: 59 20 4b 45 59 2e 0a 42 65 63 61 75 73 65 20 65  Y KEY..Because e
c990: 76 65 72 79 20 72 6f 77 20 69 6e 20 74 68 65 20  very row in the 
c9a0: 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69 71  table has a uniq
c9b0: 75 65 20 72 6f 77 20 6b 65 79 2c 0a 61 6c 6c 20  ue row key,.all 
c9c0: 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
c9d0: 20 61 72 65 20 75 6e 69 71 75 65 2e 3c 2f 70 3e   are unique.</p>
c9e0: 0a 0a 3c 70 3e 5e 49 6e 20 61 20 6e 6f 72 6d 61  ..<p>^In a norma
c9f0: 6c 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20 69  l index, there i
ca00: 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d  s a one-to-one m
ca10: 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 72  apping between r
ca20: 6f 77 73 20 69 6e 20 61 20 0a 74 61 62 6c 65 20  ows in a .table 
ca30: 61 6e 64 20 65 6e 74 72 69 65 73 20 69 6e 20 65  and entries in e
ca40: 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ach index associ
ca50: 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74  ated with that t
ca60: 61 62 6c 65 2e 0a 5e 48 6f 77 65 76 65 72 2c 20  able..^However, 
ca70: 69 6e 20 61 20 5b 70 61 72 74 69 61 6c 20 69 6e  in a [partial in
ca80: 64 65 78 5d 2c 20 74 68 65 20 69 6e 64 65 78 20  dex], the index 
ca90: 62 2d 74 72 65 65 20 6f 6e 6c 79 20 63 6f 6e 74  b-tree only cont
caa0: 61 69 6e 73 20 65 6e 74 72 69 65 73 0a 63 6f 72  ains entries.cor
cab0: 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 61  responding to ta
cac0: 62 6c 65 20 72 6f 77 73 20 66 6f 72 20 77 68 69  ble rows for whi
cad0: 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61  ch the WHERE cla
cae0: 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  use expression o
caf0: 6e 20 74 68 65 0a 43 52 45 41 54 45 20 49 4e 44  n the.CREATE IND
cb00: 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  EX statement is 
cb10: 74 72 75 65 2e 0a 5e 43 6f 72 72 65 73 70 6f 6e  true..^Correspon
cb20: 64 69 6e 67 20 72 6f 77 73 20 69 6e 20 74 68 65  ding rows in the
cb30: 20 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c 65   index and table
cb40: 20 62 2d 74 72 65 65 73 20 73 68 61 72 65 20 74   b-trees share t
cb50: 68 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 6f 72  he same rowid.or
cb60: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c   primary key val
cb70: 75 65 73 20 61 6e 64 20 63 6f 6e 74 61 69 6e 20  ues and contain 
cb80: 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
cb90: 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20 63  or all indexed c
cba0: 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 34  olumns.</p>..<h4
cbb0: 3e 32 2e 35 2e 31 20 53 75 70 70 72 65 73 73 69  >2.5.1 Suppressi
cbc0: 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74 20  on of redundant 
cbd0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48 4f  columns in WITHO
cbe0: 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64 61  UT ROWID seconda
cbf0: 72 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68 34 3e  ry indexed.</h4>
cc00: 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69 6e 64  ..<p> ^In an ind
cc10: 65 78 20 6f 6e 20 61 20 57 49 54 48 4f 55 54 20  ex on a WITHOUT 
cc20: 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 69 66 20  ROWID table, if 
cc30: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74  one or more of t
cc40: 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68  he columns.of th
cc50: 65 20 74 61 62 6c 65 20 50 52 49 4d 41 52 59 20  e table PRIMARY 
cc60: 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63 6f 6c  KEY are also col
cc70: 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e 64 65  umns of the inde
cc80: 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e 64 65  x, then the.inde
cc90: 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 6f  xed column is no
cca0: 74 20 72 65 70 65 61 74 65 64 20 69 6e 20 74 68  t repeated in th
ccb0: 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75 66 66  e table-key suff
ccc0: 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20 6f 66  ix on the end of
ccd0: 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72  .the index recor
cce0: 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78 61 6d  d.  ^(As an exam
ccf0: 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 74 68  ple, consider th
cd00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 3a  e following SQL:
cd10: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
cd20: 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
cd30: 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c 65 2c   ex25(a,b,c,d,e,
cd40: 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c 63 2c  PRIMARY KEY(d,c,
cd50: 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f 77 69  a)) WITHOUT rowi
cd60: 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20  d;.CREATE INDEX 
cd70: 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35 28 63  ex25ce ON ex25(c
cd80: 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45  ,e);.CREATE INDE
cd90: 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20 65 78  X ex25acde ON ex
cda0: 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c 2f 70  25(a,c,d,e);.</p
cdb0: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
cdc0: 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20 69 6e  ..<p>Each row in
cdd0: 20 74 68 65 20 65 78 32 35 63 65 20 69 6e 64 65   the ex25ce inde
cde0: 78 20 69 73 20 61 20 72 65 63 6f 72 64 0a 77 69  x is a record.wi
cdf0: 74 68 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 73  th these columns
ce00: 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20 20 54  : c, e, d, a.  T
ce10: 68 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f 6c  he first two col
ce20: 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63 6f 6c  umns are.the col
ce30: 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78  umns being index
ce40: 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20 54 68  ed, c and e.  Th
ce50: 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75  e remaining colu
ce60: 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72 69 6d  mns are the prim
ce70: 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65 20 63  ary.key of the c
ce80: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
ce90: 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c 6c  le row.  Normall
cea0: 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  y, the primary k
ceb0: 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f 6c 75  ey would be.colu
cec0: 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20 61 2c  mns d, c, and a,
ced0: 20 62 75 74 20 62 65 63 61 75 73 65 20 63 6f 6c   but because col
cee0: 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20 61 70  umn c already ap
cef0: 70 65 61 72 73 20 65 61 72 6c 69 65 72 20 69 6e  pears earlier in
cf00: 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74 20 69   the.index, it i
cf10: 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
cf20: 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e 29 5e  he key suffix.)^
cf30: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74 68  </p>..<p>^(In th
cf40: 65 20 65 78 74 72 65 6d 65 20 63 61 73 65 20 77  e extreme case w
cf50: 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e 73  here the columns
cf60: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 63   being indexed c
cf70: 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  over all columns
cf80: 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20  .of the PRIMARY 
cf90: 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20 77  KEY, the index w
cfa0: 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20 6f  ill consist of o
cfb0: 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  nly the columns 
cfc0: 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20 20  being.indexed.  
cfd0: 54 68 65 20 65 78 32 35 61 63 64 65 20 65 78 61  The ex25acde exa
cfe0: 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f 6e  mple above demon
cff0: 73 74 72 61 74 65 73 20 74 68 69 73 2e 29 5e 20  strates this.)^ 
d000: 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 0a   ^Each entry in.
d010: 74 68 65 20 65 78 32 35 61 63 64 65 20 69 6e 64  the ex25acde ind
d020: 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f  ex consists of o
d030: 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  nly the columns 
d040: 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c 20  a, c, d, and e, 
d050: 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c 2f  in that.order.</
d060: 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73 75 70  p>..<p> ^The sup
d070: 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64 75  pression of redu
d080: 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69 6e  ndant columns in
d090: 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 20   the key suffix 
d0a0: 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e 74 72  of an index.entr
d0b0: 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20 69 6e  y only occurs in
d0c0: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
d0d0: 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e 20 6f  ables.  ^In an o
d0e0: 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74 61  rdinary rowid ta
d0f0: 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78 20 65  ble,.the index e
d100: 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e 64 73  ntry always ends
d110: 20 77 69 74 68 20 74 68 65 20 72 6f 77 69 64 20   with the rowid 
d120: 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49 4e 54  even if the [INT
d130: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
d140: 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65 20  ].column is one 
d150: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62  of the columns b
d160: 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c 2f 70  eing indexed.</p
d170: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
d180: 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ent sqlite_maste
d190: 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  r {sqlite_master
d1a0: 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  } {sqlite_master
d1b0: 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c 68   table}</tcl>.<h
d1c0: 33 3e 32 2e 36 20 53 74 6f 72 61 67 65 20 4f 66  3>2.6 Storage Of
d1d0: 20 54 68 65 20 53 51 4c 20 44 61 74 61 62 61 73   The SQL Databas
d1e0: 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 0a 3c  e Schema</h3>..<
d1f0: 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61 20 64  p>^Page 1 of a d
d200: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
d210: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6f 66  the root page of
d220: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
d230: 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73 70 65  that.holds a spe
d240: 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64  cial table named
d250: 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22   "sqlite_master"
d260: 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74 65 6d   (or "sqlite_tem
d270: 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74 68 65  p_master" in.the
d280: 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d 50 20   case of a TEMP 
d290: 64 61 74 61 62 61 73 65 29 20 77 68 69 63 68 20  database) which 
d2a0: 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d 70 6c  stores the compl
d2b0: 65 74 65 0a 64 61 74 61 62 61 73 65 20 73 63 68  ete.database sch
d2c0: 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74 72 75  ema.  ^(The stru
d2d0: 63 74 75 72 65 20 6f 66 20 74 68 65 20 73 71 6c  cture of the sql
d2e0: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
d2f0: 20 69 73 20 61 73 0a 69 66 20 69 74 20 68 61 64   is as.if it had
d300: 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 75 73   been created us
d310: 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ing the followin
d320: 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  g SQL:</p>..<blo
d330: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
d340: 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
d350: 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79 70 65  e_master(.  type
d360: 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74 65   text,.  name te
d370: 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20 74  xt,.  tbl_name t
d380: 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65 20  ext,.  rootpage 
d390: 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c 20 74  integer,.  sql t
d3a0: 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ext.);.</pre></b
d3b0: 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
d3c0: 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  >^The sqlite_mas
d3d0: 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ter table contai
d3e0: 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65  ns one row for e
d3f0: 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  ach table, index
d400: 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72 69 67  , view,.and trig
d410: 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c  ger (collectivel
d420: 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69 6e 20  y "objects") in 
d430: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
d440: 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68 65 72  ema, except ther
d450: 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20 66 6f  e.is no entry fo
d460: 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  r the sqlite_mas
d470: 74 65 72 20 74 61 62 6c 65 20 69 74 73 65 6c 66  ter table itself
d480: 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d  .  ^The sqlite_m
d490: 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e 74  aster table.cont
d4a0: 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66 6f 72  ains entries for
d4b0: 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d   [internal schem
d4c0: 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61 64  a objects] in ad
d4d0: 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69 63  dition to applic
d4e0: 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67 72  ation-.and progr
d4f0: 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f 62  ammer-defined ob
d500: 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54 68  jects....<p>^(Th
d510: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
d520: 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c  type column will
d530: 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20 66   be one.of the f
d540: 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20 73 74  ollowing text st
d550: 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65 27 2c  rings:  'table',
d560: 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65 77 27   'index', 'view'
d570: 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27 0a 61  , or 'trigger'.a
d580: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
d590: 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20 64  type of object d
d5a0: 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27 74 61  efined.  The 'ta
d5b0: 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73 20 75  ble' string is u
d5c0: 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72 64  sed.for both ord
d5d0: 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72 74 75  inary and [virtu
d5e0: 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f 70  al tables].)^</p
d5f0: 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65 20 73 71 6c  >..</p>^(The sql
d600: 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 20  ite_master.name 
d610: 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64  column will hold
d620: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
d630: 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55 4e   object.)^.^([UN
d640: 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41  IQUE] and [PRIMA
d650: 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69  RY KEY] constrai
d660: 6e 74 73 20 6f 6e 20 74 61 62 6c 65 73 20 63 61  nts on tables ca
d670: 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 63 72  use SQLite to cr
d680: 65 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c 20 69  eate.[internal i
d690: 6e 64 65 78 65 73 5d 20 77 69 74 68 20 6e 61 6d  ndexes] with nam
d6a0: 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  es of the form "
d6b0: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
d6c0: 5f 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72 65 20  _TABLE_N".where 
d6d0: 54 41 42 4c 45 20 69 73 20 72 65 70 6c 61 63 65  TABLE is replace
d6e0: 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66  d by the name of
d6f0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
d700: 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63 6f 6e  contains the.con
d710: 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20 69 73  straint and N is
d720: 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 67 69   an integer begi
d730: 6e 6e 69 6e 67 20 77 69 74 68 20 31 20 61 6e 64  nning with 1 and
d740: 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79 20 6f   increasing by o
d750: 6e 65 0a 77 69 74 68 20 65 61 63 68 20 63 6f 6e  ne.with each con
d760: 73 74 72 61 69 6e 74 20 73 65 65 6e 20 69 6e 20  straint seen in 
d770: 74 68 65 20 74 61 62 6c 65 20 64 65 66 69 6e 69  the table defini
d780: 74 69 6f 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20 5b  tion.)^.^(In a [
d790: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
d7a0: 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20 6e  able, there is n
d7b0: 6f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  o sqlite_master 
d7c0: 65 6e 74 72 79 20 66 6f 72 20 74 68 65 0a 50 52  entry for the.PR
d7d0: 49 4d 41 52 59 20 4b 45 59 2c 20 62 75 74 20 74  IMARY KEY, but t
d7e0: 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69  he "sqlite_autoi
d7f0: 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61  ndex_TABLE_N" na
d800: 6d 65 20 69 73 20 73 65 74 20 61 73 69 64 65 0a  me is set aside.
d810: 66 6f 72 20 74 68 65 20 50 52 49 4d 41 52 59 20  for the PRIMARY 
d820: 4b 45 59 20 61 73 20 69 66 20 74 68 65 20 73 71  KEY as if the sq
d830: 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74 72  lite_master entr
d840: 79 20 64 69 64 20 65 78 69 73 74 2e 20 20 54 68  y did exist.  Th
d850: 69 73 0a 77 69 6c 6c 20 61 66 66 65 63 74 20 74  is.will affect t
d860: 68 65 20 6e 75 6d 62 65 72 69 6e 67 20 6f 66 20  he numbering of 
d870: 73 75 62 73 65 71 75 65 6e 74 20 55 4e 49 51 55  subsequent UNIQU
d880: 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e  E constraints.)^
d890: 0a 5e 54 68 65 20 22 73 71 6c 69 74 65 5f 61 75  .^The "sqlite_au
d8a0: 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22  toindex_TABLE_N"
d8b0: 20 6e 61 6d 65 20 69 73 20 6e 65 76 65 72 20 61   name is never a
d8c0: 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 6e 0a  llocated for an.
d8d0: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
d8e0: 20 4b 45 59 5d 2c 20 65 69 74 68 65 72 20 69 6e   KEY], either in
d8f0: 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 6f 72   rowid tables or
d900: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
d910: 61 62 6c 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  ables..</p>..<p>
d920: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
d930: 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d  r.tbl_name colum
d940: 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  n holds the name
d950: 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20 76   of a table or v
d960: 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f 62 6a  iew.that the obj
d970: 65 63 74 20 69 73 20 61 73 73 6f 63 69 61 74 65  ect is associate
d980: 64 20 77 69 74 68 2e 20 20 5e 46 6f 72 20 61 20  d with.  ^For a 
d990: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c 20 74  table or view, t
d9a0: 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75  he.tbl_name colu
d9b0: 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20  mn is a copy of 
d9c0: 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2e  the name column.
d9d0: 20 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65 78 2c    ^For an index,
d9e0: 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69 73   the tbl_name.is
d9f0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
da00: 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 69   table that is i
da10: 6e 64 65 78 65 64 2e 20 20 5e 46 6f 72 20 61 20  ndexed.  ^For a 
da20: 74 72 69 67 67 65 72 2c 20 74 68 65 20 74 62 6c  trigger, the tbl
da30: 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f  _name.column sto
da40: 72 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  res the name of 
da50: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
da60: 77 20 74 68 61 74 20 63 61 75 73 65 73 20 74 68  w that causes th
da70: 65 20 74 72 69 67 67 65 72 20 0a 74 6f 20 66 69  e trigger .to fi
da80: 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68  re.</p>..<p>^(Th
da90: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
daa0: 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20  rootpage column 
dab0: 73 74 6f 72 65 73 20 74 68 65 20 70 61 67 65 20  stores the page 
dac0: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72 6f  number of the ro
dad0: 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65 20 66  ot.b-tree page f
dae0: 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  or tables and in
daf0: 64 65 78 65 73 2e 29 5e 20 20 5e 46 6f 72 20 72  dexes.)^  ^For r
db00: 6f 77 73 20 74 68 61 74 20 64 65 66 69 6e 65 20  ows that define 
db10: 76 69 65 77 73 2c 20 74 72 69 67 67 65 72 73 2c  views, triggers,
db20: 0a 61 6e 64 20 76 69 72 74 75 61 6c 20 74 61 62  .and virtual tab
db30: 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74 70 61 67  les, the rootpag
db40: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f 72  e column is 0 or
db50: 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   NULL.</p>..<p>^
db60: 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  (The sqlite_mast
db70: 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73 74  er.sql column st
db80: 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20 74 68  ores SQL text th
db90: 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
dba0: 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 53  .object.  This S
dbb0: 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b 43 52  QL text is a [CR
dbc0: 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43 52  EATE TABLE], [CR
dbd0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
dbe0: 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e 44  LE],.[CREATE IND
dbf0: 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49 45  EX],.[CREATE VIE
dc00: 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45 20 54  W], or [CREATE T
dc10: 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e  RIGGER] statemen
dc20: 74 20 74 68 61 74 20 69 66 20 65 76 61 6c 75 61  t that if evalua
dc30: 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68 65 20  ted against.the 
dc40: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
dc50: 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d 61 69  en it is the mai
dc60: 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20 61 20  n database of a 
dc70: 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  [database connec
dc80: 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63 72  tion].would recr
dc90: 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65 63 74  eated the object
dca0: 2e 29 5e 20 20 54 68 65 20 74 65 78 74 20 69 73  .)^  The text is
dcb0: 20 75 73 75 61 6c 6c 79 20 61 20 63 6f 70 79 20   usually a copy 
dcc0: 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  of the original.
dcd0: 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 74  statement used t
dce0: 6f 20 63 72 65 61 74 65 20 74 68 65 20 6f 62 6a  o create the obj
dcf0: 65 63 74 20 62 75 74 20 77 69 74 68 20 6e 6f 72  ect but with nor
dd00: 6d 61 6c 69 7a 61 74 69 6f 6e 73 20 61 70 70 6c  malizations appl
dd10: 69 65 64 20 73 6f 0a 74 68 61 74 20 74 68 65 20  ied so.that the 
dd20: 74 65 78 74 20 63 6f 6e 66 6f 72 6d 73 20 74 6f  text conforms to
dd30: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
dd40: 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  ules:..<ul>.<li>
dd50: 5e 54 68 65 20 43 52 45 41 54 45 2c 20 54 41 42  ^The CREATE, TAB
dd60: 4c 45 2c 20 56 49 45 57 2c 20 54 52 49 47 47 45  LE, VIEW, TRIGGE
dd70: 52 2c 20 61 6e 64 20 49 4e 44 45 58 20 6b 65 79  R, and INDEX key
dd80: 77 6f 72 64 73 20 61 74 20 74 68 65 20 62 65 67  words at the beg
dd90: 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 73 74  inning.of the st
dda0: 61 74 65 6d 65 6e 74 20 61 72 65 20 63 6f 6e 76  atement are conv
ddb0: 65 72 74 65 64 20 74 6f 20 61 6c 6c 20 75 70 70  erted to all upp
ddc0: 65 72 20 63 61 73 65 20 6c 65 74 74 65 72 73 2e  er case letters.
ddd0: 0a 3c 6c 69 3e 5e 54 68 65 20 54 45 4d 50 20 6f  .<li>^The TEMP o
dde0: 72 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77  r TEMPORARY keyw
ddf0: 6f 72 64 20 69 73 20 72 65 6d 6f 76 65 64 20 69  ord is removed i
de00: 66 20 69 74 20 6f 63 63 75 72 73 20 61 66 74 65  f it occurs afte
de10: 72 20 74 68 65 20 0a 69 6e 69 74 69 61 6c 20 43  r the .initial C
de20: 52 45 41 54 45 20 6b 65 79 77 6f 72 64 2e 0a 3c  REATE keyword..<
de30: 6c 69 3e 5e 41 6e 79 20 64 61 74 61 62 61 73 65  li>^Any database
de40: 20 6e 61 6d 65 20 71 75 61 6c 69 66 69 65 72 20   name qualifier 
de50: 74 68 61 74 20 6f 63 63 75 72 73 20 70 72 69 6f  that occurs prio
de60: 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
de70: 20 74 68 65 0a 6f 62 6a 65 63 74 20 62 65 69 6e   the.object bein
de80: 67 20 63 72 65 61 74 65 64 20 69 73 20 72 65 6d  g created is rem
de90: 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69  oved..<li>^Leadi
dea0: 6e 67 20 73 70 61 63 65 73 20 61 72 65 20 72 65  ng spaces are re
deb0: 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20  moved..<li>^All 
dec0: 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77 69 6e 67  spaces following
ded0: 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20 6b   the first two k
dee0: 65 79 77 6f 72 64 73 20 61 72 65 20 63 6f 6e 76  eywords are conv
def0: 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  erted into a sin
df00: 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e  gle.space..</ul>
df10: 0a 0a 3c 70 3e 5e 28 54 68 65 20 74 65 78 74 20  ..<p>^(The text 
df20: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  in the sqlite_ma
df30: 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20  ster.sql column 
df40: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
df50: 20 6f 72 69 67 69 6e 61 6c 0a 43 52 45 41 54 45   original.CREATE
df60: 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74 20   statement text 
df70: 74 68 61 74 20 63 72 65 61 74 65 64 20 74 68 65  that created the
df80: 20 6f 62 6a 65 63 74 2c 20 65 78 63 65 70 74 20   object, except 
df90: 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 73 0a 64 65  normalized as.de
dfa0: 73 63 72 69 62 65 64 20 61 62 6f 76 65 20 61 6e  scribed above an
dfb0: 64 20 61 73 20 6d 6f 64 69 66 69 65 64 20 62 79  d as modified by
dfc0: 20 73 75 62 73 65 71 75 65 6e 74 20 5b 41 4c 54   subsequent [ALT
dfd0: 45 52 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  ER TABLE] statem
dfe0: 65 6e 74 73 2e 29 5e 0a 5e 28 54 68 65 20 73 71  ents.)^.^(The sq
dff0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20  lite_master.sql 
e000: 69 73 20 4e 55 4c 4c 20 66 6f 72 20 74 68 65 20  is NULL for the 
e010: 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65  [internal indexe
e020: 73 5d 20 74 68 61 74 20 61 72 65 0a 61 75 74 6f  s] that are.auto
e030: 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
e040: 64 20 62 79 20 5b 55 4e 49 51 55 45 5d 20 6f 72  d by [UNIQUE] or
e050: 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63   [PRIMARY KEY] c
e060: 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 3c 2f 70  onstraints.)^</p
e070: 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  >...<tcl>hd_frag
e080: 6d 65 6e 74 20 69 6e 74 73 63 68 65 6d 61 20 7b  ment intschema {
e090: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
e0a0: 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e 74 65  objects} \.{inte
e0b0: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e0c0: 63 74 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e  ct} {internal in
e0d0: 64 65 78 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69  dex} {internal i
e0e0: 6e 64 65 78 65 73 7d 20 5c 0a 7b 69 6e 74 65 72  ndexes} \.{inter
e0f0: 6e 61 6c 20 74 61 62 6c 65 7d 20 7b 69 6e 74 65  nal table} {inte
e100: 72 6e 61 6c 20 74 61 62 6c 65 73 7d 3c 2f 74 63  rnal tables}</tc
e110: 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 31 20 49 6e 74  l>.<h4>2.6.1 Int
e120: 65 72 6e 61 6c 20 53 63 68 65 6d 61 20 4f 62 6a  ernal Schema Obj
e130: 65 63 74 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 49  ects</h4>..<p>^I
e140: 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68  n addition to th
e150: 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 65 78 65  e tables, indexe
e160: 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 20 74 72  s, views, and tr
e170: 69 67 67 65 72 73 20 63 72 65 61 74 65 64 20 62  iggers created b
e180: 79 0a 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  y.the applicatio
e190: 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20 64 65 76  n and/or the dev
e1a0: 65 6c 6f 70 65 72 20 75 73 69 6e 67 20 43 52 45  eloper using CRE
e1b0: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 53  ATE statements S
e1c0: 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d  QL, the.sqlite_m
e1d0: 61 73 74 65 72 20 74 61 62 6c 65 20 6d 61 79 20  aster table may 
e1e0: 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20 6f 72 20  contain zero or 
e1f0: 6d 6f 72 65 20 65 6e 74 72 69 65 73 20 66 6f 72  more entries for
e200: 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c 20 73 63   .<i>internal sc
e210: 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c 2f 69 3e  hema objects</i>
e220: 20 74 68 61 74 20 61 72 65 20 63 72 65 61 74 65   that are create
e230: 64 20 62 79 20 53 51 4c 69 74 65 20 66 6f 72 20  d by SQLite for 
e240: 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65 72 6e 61  its .own interna
e250: 6c 20 75 73 65 2e 20 20 5e 54 68 65 20 6e 61 6d  l use.  ^The nam
e260: 65 73 20 6f 66 20 69 6e 74 65 72 6e 61 6c 20 73  es of internal s
e270: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 0a 61 6c  chema objects.al
e280: 77 61 79 73 20 62 65 67 69 6e 20 77 69 74 68 20  ways begin with 
e290: 22 73 71 6c 69 74 65 5f 22 20 61 6e 64 20 61 6e  "sqlite_" and an
e2a0: 79 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  y table, index, 
e2b0: 76 69 65 77 2c 20 6f 72 20 74 72 69 67 67 65 72  view, or trigger
e2c0: 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62 65 67 69  .whose name begi
e2d0: 6e 73 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f  ns with "sqlite_
e2e0: 22 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c  " is an internal
e2f0: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 2e 0a   schema object..
e300: 5e 53 51 4c 69 74 65 20 70 72 6f 68 69 62 69 74  ^SQLite prohibit
e310: 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66  s applications f
e320: 72 6f 6d 20 63 72 65 61 74 69 6e 67 20 6f 62 6a  rom creating obj
e330: 65 63 74 73 20 77 68 6f 73 65 20 6e 61 6d 65 73  ects whose names
e340: 20 62 65 67 69 6e 0a 77 69 74 68 20 22 73 71 6c   begin.with "sql
e350: 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e 49 6e 74  ite_".  ..<p>Int
e360: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
e370: 65 63 74 73 20 75 73 65 64 20 62 79 20 53 51 4c  ects used by SQL
e380: 69 74 65 20 6d 61 79 20 69 6e 63 6c 75 64 65 20  ite may include 
e390: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a  the following:..
e3a0: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e 64 69  <ul>.<li><p>Indi
e3b0: 63 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20 6f  ces with names o
e3c0: 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69  f the form "sqli
e3d0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42  te_autoindex_TAB
e3e0: 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20 20 20 20  LE_N" that.     
e3f0: 20 20 61 72 65 20 75 73 65 64 20 74 6f 20 69 6d    are used to im
e400: 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51 55 45 5d  plement [UNIQUE]
e410: 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45   and [PRIMARY KE
e420: 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f  Y] constraints o
e430: 6e 0a 20 20 20 20 20 20 20 6f 72 64 69 6e 61 72  n.       ordinar
e440: 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c 69 3e 3c  y tables...<li><
e450: 70 3e 41 20 74 61 62 6c 65 20 77 69 74 68 20 74  p>A table with t
e460: 68 65 20 6e 61 6d 65 20 22 73 71 6c 69 74 65 5f  he name "sqlite_
e470: 73 65 71 75 65 6e 63 65 22 20 74 68 61 74 20 69  sequence" that i
e480: 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74  s used to keep t
e490: 72 61 63 6b 0a 20 20 20 20 20 20 20 6f 66 20 74  rack.       of t
e4a0: 68 65 20 6d 61 78 69 6d 75 6d 20 68 69 73 74 6f  he maximum histo
e4b0: 72 69 63 61 6c 20 5b 49 4e 54 45 47 45 52 20 50  rical [INTEGER P
e4c0: 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 6f 72 20  RIMARY KEY] for 
e4d0: 61 20 74 61 62 6c 65 20 74 68 61 74 0a 20 20 20  a table that.   
e4e0: 20 20 20 20 75 73 69 6e 67 20 5b 41 55 54 4f 49      using [AUTOI
e4f0: 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e  NCREMENT]...<li>
e500: 3c 70 3e 54 61 62 6c 65 73 20 77 69 74 68 20 6e  <p>Tables with n
e510: 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ames of the form
e520: 20 22 73 71 6c 69 74 65 5f 73 74 61 74 4e 22 20   "sqlite_statN" 
e530: 77 68 65 72 65 20 4e 20 69 73 20 61 6e 20 69 6e  where N is an in
e540: 74 65 67 65 72 2e 0a 20 20 20 20 20 20 20 53 75  teger..       Su
e550: 63 68 20 74 61 62 6c 65 73 20 73 74 6f 72 65 20  ch tables store 
e560: 64 61 74 61 62 61 73 65 20 73 74 61 74 69 73 74  database statist
e570: 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79 20  ics gathered by 
e580: 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a 20 20  the [ANALYZE].  
e590: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 61 6e 64       command and
e5a0: 20 75 73 65 64 20 62 79 20 74 68 65 20 71 75 65   used by the que
e5b0: 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 68 65  ry planner to he
e5c0: 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  lp determine the
e5d0: 20 62 65 73 74 0a 20 20 20 20 20 20 20 61 6c 67   best.       alg
e5e0: 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 66 6f  orithm to use fo
e5f0: 72 20 65 61 63 68 20 71 75 65 72 79 2e 0a 3c 2f  r each query..</
e600: 75 6c 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e 74 65  ul>..<p>New inte
e610: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e620: 63 74 73 20 6e 61 6d 65 73 2c 20 61 6c 77 61 79  cts names, alway
e630: 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
e640: 20 22 73 71 6c 69 74 65 5f 22 2c 0a 6d 61 79 20   "sqlite_",.may 
e650: 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  be added to the 
e660: 53 51 4c 69 74 65 20 66 69 6c 65 20 66 6f 72 6d  SQLite file form
e670: 61 74 20 69 6e 20 66 75 74 75 72 65 20 72 65 6c  at in future rel
e680: 65 61 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f  eases...<tcl>hd_
e690: 66 72 61 67 6d 65 6e 74 20 73 65 71 74 61 62 20  fragment seqtab 
e6a0: 7b 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65  {sqlite_sequence
e6b0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e  }</tcl>.<h4>2.6.
e6c0: 32 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  2 The sqlite_seq
e6d0: 75 65 6e 63 65 20 74 61 62 6c 65 3c 2f 68 34 3e  uence table</h4>
e6e0: 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65  ..<p>^The sqlite
e6f0: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
e700: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 74  is an internal t
e710: 61 62 6c 65 20 75 73 65 64 20 74 6f 20 68 65 6c  able used to hel
e720: 70 20 69 6d 70 6c 65 6d 65 6e 74 0a 5b 41 55 54  p implement.[AUT
e730: 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 20 20 5e 54  OINCREMENT].  ^T
e740: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e750: 63 65 20 74 61 62 6c 65 20 69 73 20 63 72 65 61  ce table is crea
e760: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
e770: 79 0a 77 68 65 6e 65 76 65 72 20 61 6e 79 20 6f  y.whenever any o
e780: 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 77 69  rdinary table wi
e790: 74 68 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  th an AUTOINCREM
e7a0: 45 4e 54 20 69 6e 74 65 67 65 72 20 70 72 69 6d  ENT integer prim
e7b0: 61 72 79 0a 6b 65 79 20 69 73 20 63 72 65 61 74  ary.key is creat
e7c0: 65 64 2e 20 20 5e 4f 6e 63 65 20 63 72 65 61 74  ed.  ^Once creat
e7d0: 65 64 2c 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ed, the sqlite_s
e7e0: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 65 78  equence table ex
e7f0: 69 73 74 73 20 69 6e 20 74 68 65 0a 73 71 6c 69  ists in the.sqli
e800: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
e810: 66 6f 72 65 76 65 72 3b 20 69 74 20 63 61 6e 6e  forever; it cann
e820: 6f 74 20 62 65 20 64 72 6f 70 70 65 64 2e 0a 5e  ot be dropped..^
e830: 28 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20  (The schema for 
e840: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
e850: 6e 63 65 20 74 61 62 6c 65 20 69 73 3a 0a 0a 3c  nce table is:..<
e860: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
e870: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  .CREATE TABLE sq
e880: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 28 6e 61  lite_sequence(na
e890: 6d 65 2c 73 65 71 29 3b 0a 3c 2f 70 72 65 3e 3c  me,seq);.</pre><
e8a0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
e8b0: 3c 70 3e 5e 54 68 65 72 65 20 69 73 20 61 20 73  <p>^There is a s
e8c0: 69 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74 68 65  ingle row in the
e8d0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
e8e0: 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20   table for each 
e8f0: 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20 74  ordinary.table t
e900: 68 61 74 20 75 73 65 73 20 41 55 54 4f 49 4e 43  hat uses AUTOINC
e910: 52 45 4d 45 4e 54 2e 20 20 5e 28 54 68 65 20 6e  REMENT.  ^(The n
e920: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
e930: 20 28 61 73 20 69 74 20 61 70 70 65 61 72 73 20   (as it appears 
e940: 69 6e 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  in.sqlite_master
e950: 2e 6e 61 6d 65 29 20 69 73 20 69 6e 20 74 68 65  .name) is in the
e960: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
e970: 2e 6d 61 69 6e 20 66 69 65 6c 64 20 61 6e 64 20  .main field and 
e980: 74 68 65 20 6c 61 72 67 65 73 74 0a 5b 49 4e 54  the largest.[INT
e990: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
e9a0: 5d 20 65 76 65 72 20 75 73 65 64 20 62 79 20 74  ] ever used by t
e9b0: 68 61 74 20 74 61 62 6c 65 20 69 73 20 69 6e 20  hat table is in 
e9c0: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
e9d0: 6e 63 65 2e 73 65 71 0a 66 69 65 6c 64 2e 29 5e  nce.seq.field.)^
e9e0: 20 20 5e 4e 65 77 20 61 75 74 6f 6d 61 74 69 63    ^New automatic
e9f0: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69  ally generated i
ea00: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
ea10: 65 79 73 20 66 6f 72 20 41 55 54 4f 49 4e 43 52  eys for AUTOINCR
ea20: 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20 61 72 65  EMENT.tables are
ea30: 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 62   guaranteed to b
ea40: 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  e larger than th
ea50: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
ea60: 65 2e 73 65 71 20 66 69 65 6c 64 20 66 6f 72 0a  e.seq field for.
ea70: 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 28 49 66  that table..^(If
ea80: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
ea90: 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 6f  ence.seq field o
eaa0: 66 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  f an AUTOINCREME
eab0: 4e 54 20 74 61 62 6c 65 20 69 73 20 61 6c 72 65  NT table is alre
eac0: 61 64 79 20 61 74 0a 74 68 65 20 6c 61 72 67 65  ady at.the large
ead0: 73 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  st integer value
eae0: 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37   (92233720368547
eaf0: 37 35 38 30 37 29 20 74 68 65 6e 20 61 74 74 65  75807) then atte
eb00: 6d 70 74 73 20 74 6f 20 61 64 64 20 6e 65 77 0a  mpts to add new.
eb10: 72 6f 77 73 20 74 6f 20 74 68 61 74 20 74 61 62  rows to that tab
eb20: 6c 65 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  le with an autom
eb30: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
eb40: 65 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  ed integer prima
eb50: 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a 77 69 74  ry will fail.wit
eb60: 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f 46 55 4c  h an [SQLITE_FUL
eb70: 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e 54 68 65  L] error.)^.^The
eb80: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
eb90: 2e 73 65 71 20 66 69 65 6c 64 20 69 73 20 61 75  .seq field is au
eba0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61  tomatically upda
ebb0: 74 65 64 20 69 66 20 72 65 71 75 69 72 65 64 20  ted if required 
ebc0: 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72 69 65 73  when.new entries
ebd0: 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 6e   are added to an
ebe0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
ebf0: 61 62 6c 65 2e 20 20 0a 5e 54 68 65 20 73 71 6c  able.  .^The sql
ec00: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77  ite_sequence row
ec10: 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52   for an AUTOINCR
ec20: 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61  EMENT table is a
ec30: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
ec40: 65 74 65 64 0a 77 68 65 6e 20 74 68 65 20 74 61  eted.when the ta
ec50: 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e 0a  ble is dropped..
ec60: 5e 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ^If the sqlite_s
ec70: 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72 20  equence row for 
ec80: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
ec90: 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20   table does not 
eca0: 65 78 69 73 74 20 77 68 65 6e 0a 74 68 65 20 41  exist when.the A
ecb0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
ecc0: 6c 65 20 69 73 20 75 70 64 61 74 65 64 2c 20 74  le is updated, t
ecd0: 68 65 6e 20 61 20 6e 65 77 20 73 71 6c 69 74 65  hen a new sqlite
ece0: 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 69 73  _sequence row is
ecf0: 20 63 72 65 61 74 65 64 2e 0a 5e 28 49 66 20 74   created..^(If t
ed00: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ed10: 63 65 2e 73 65 71 20 76 61 6c 75 65 20 66 6f 72  ce.seq value for
ed20: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
ed30: 54 20 74 61 62 6c 65 20 69 73 20 6d 61 6e 75 61  T table is manua
ed40: 6c 6c 79 20 0a 73 65 74 20 74 6f 20 73 6f 6d 65  lly .set to some
ed50: 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e  thing other than
ed60: 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
ed70: 74 68 65 72 65 20 69 73 20 61 20 73 75 62 73 65  there is a subse
ed80: 71 75 65 6e 74 20 61 74 74 65 6d 70 74 20 74 6f  quent attempt to
ed90: 0a 69 6e 73 65 72 74 20 74 68 65 20 6f 72 20 75  .insert the or u
eda0: 70 64 61 74 65 20 74 68 65 20 41 55 54 4f 49 4e  pdate the AUTOIN
edb0: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2c 20 74  CREMENT table, t
edc0: 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72  hen the behavior
edd0: 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 29 5e   is undefined.)^
ede0: 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63 61 74 69 6f  ..<p>^Applicatio
edf0: 6e 20 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65  n code is allowe
ee00: 64 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  d to modify the 
ee10: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
ee20: 74 61 62 6c 65 2c 20 74 6f 20 61 64 64 0a 6e 65  table, to add.ne
ee30: 77 20 72 6f 77 73 2c 20 74 6f 20 64 65 6c 65 74  w rows, to delet
ee40: 65 20 72 6f 77 73 2c 20 6f 72 20 74 6f 20 6d 6f  e rows, or to mo
ee50: 64 69 66 79 20 65 78 69 73 74 69 6e 67 20 72 6f  dify existing ro
ee60: 77 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 61  ws.  ^However, a
ee70: 70 70 6c 69 63 61 74 69 6f 6e 0a 63 6f 64 65 20  pplication.code 
ee80: 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 74 68  cannot create th
ee90: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
eea0: 65 20 74 61 62 6c 65 20 69 66 20 69 74 20 64 6f  e table if it do
eeb0: 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 65  es not already e
eec0: 78 69 73 74 2e 0a 5e 41 70 70 6c 69 63 61 74 69  xist..^Applicati
eed0: 6f 6e 20 63 6f 64 65 20 63 61 6e 20 64 65 6c 65  on code can dele
eee0: 74 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66  te all entries f
eef0: 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f 73  rom the sqlite_s
ef00: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2c 0a 62  equence table,.b
ef10: 75 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63  ut application c
ef20: 6f 64 65 20 63 61 6e 6e 6f 74 20 64 72 6f 70 20  ode cannot drop 
ef30: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
ef40: 6e 63 65 20 74 61 62 6c 65 2e 0a 0a 3c 74 63 6c  nce table...<tcl
ef50: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61  >hd_fragment sta
ef60: 74 31 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74  t1tab {sqlite_st
ef70: 61 74 31 7d 20 53 51 4c 49 54 45 5f 53 54 41 54  at1} SQLITE_STAT
ef80: 31 20 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36  1 </tcl>.<h4>2.6
ef90: 2e 33 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .3 The sqlite_st
efa0: 61 74 31 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a  at1 table</h4>..
efb0: 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 73  <p>^The sqlite_s
efc0: 74 61 74 31 20 69 73 20 61 6e 20 69 6e 74 65 72  tat1 is an inter
efd0: 6e 61 6c 20 74 61 62 6c 65 20 63 72 65 61 74 65  nal table create
efe0: 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a  d by the [ANALYZ
eff0: 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e 64 20 75  E] command.and u
f000: 73 65 64 20 74 6f 20 68 6f 6c 64 20 73 75 70 70  sed to hold supp
f010: 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f 72 6d 61  lemental informa
f020: 74 69 6f 6e 20 61 62 6f 75 74 20 74 61 62 6c 65  tion about table
f030: 73 20 61 6e 64 20 69 6e 64 65 78 65 73 20 74 68  s and indexes th
f040: 61 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61  at the.query pla
f050: 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20  nner can use to 
f060: 68 65 6c 70 20 69 74 20 66 69 6e 64 20 62 65 74  help it find bet
f070: 74 65 72 20 77 61 79 73 20 6f 66 20 70 65 72 66  ter ways of perf
f080: 6f 72 6d 69 6e 67 20 71 75 65 72 69 65 73 2e 0a  orming queries..
f090: 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61  ^Applications ca
f0a0: 6e 20 75 70 64 61 74 65 2c 20 64 65 6c 65 74 65  n update, delete
f0b0: 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74 20 69 6e   from, insert in
f0c0: 74 6f 20 6f 72 20 64 72 6f 70 20 74 68 65 20 73  to or drop the s
f0d0: 71 6c 69 74 65 5f 73 74 61 74 31 0a 74 61 62 6c  qlite_stat1.tabl
f0e0: 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f 74 20 63  e, but may not c
f0f0: 72 65 61 74 65 20 6f 72 20 61 6c 74 65 72 20 74  reate or alter t
f100: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
f110: 74 61 62 6c 65 2e 0a 5e 28 54 68 65 20 73 63 68  table..^(The sch
f120: 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ema of the sqlit
f130: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 69 73  e_stat1 table is
f140: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62   as follows:..<b
f150: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
f160: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
f170: 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c 69 64  ite_stat1(tbl,id
f180: 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65 3e 3c  x,stat);.</pre><
f190: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
f1a0: 3c 70 3e 20 5e 28 54 68 65 72 65 20 69 73 20 6e  <p> ^(There is n
f1b0: 6f 72 6d 61 6c 6c 79 20 6f 6e 65 20 72 6f 77 20  ormally one row 
f1c0: 70 65 72 20 69 6e 64 65 78 2c 20 77 69 74 68 20  per index, with 
f1d0: 74 68 65 20 69 6e 64 65 78 20 69 64 65 6e 74 69  the index identi
f1e0: 66 69 65 64 20 62 79 20 74 68 65 0a 6e 61 6d 65  fied by the.name
f1f0: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
f200: 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 2e  tat1.idx column.
f210: 29 5e 20 20 5e 28 54 68 65 20 73 71 6c 69 74 65  )^  ^(The sqlite
f220: 5f 73 74 61 74 31 2e 74 62 6c 20 63 6f 6c 75 6d  _stat1.tbl colum
f230: 6e 20 69 73 0a 74 68 65 20 6e 61 6d 65 20 6f 66  n is.the name of
f240: 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68   the table to wh
f250: 69 63 68 20 74 68 65 20 69 6e 64 65 78 20 62 65  ich the index be
f260: 6c 6f 6e 67 73 2e 29 5e 20 20 5e 28 49 6e 20 65  longs.)^  ^(In e
f270: 61 63 68 20 73 75 63 68 20 72 6f 77 2c 20 0a 74  ach such row, .t
f280: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 2e 73  he sqlite_stat.s
f290: 74 61 74 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20  tat column will 
f2a0: 62 65 0a 61 20 73 74 72 69 6e 67 20 63 6f 6e 73  be.a string cons
f2b0: 69 73 74 69 6e 67 20 6f 66 20 61 20 6c 69 73 74  isting of a list
f2c0: 20 6f 66 20 69 6e 74 65 67 65 72 73 20 66 6f 6c   of integers fol
f2d0: 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72  lowed by zero or
f2e0: 20 6d 6f 72 65 20 0a 61 72 67 75 6d 65 6e 74 73   more .arguments
f2f0: 2e 29 5e 20 20 5e 54 68 65 20 66 69 72 73 74 20  .)^  ^The first 
f300: 69 6e 74 65 67 65 72 20 69 6e 20 74 68 69 73 0a  integer in this.
f310: 6c 69 73 74 20 69 73 20 74 68 65 20 61 70 70 72  list is the appr
f320: 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
f330: 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
f340: 64 65 78 20 61 6e 64 20 69 6e 20 74 68 65 20 74  dex and in the t
f350: 61 62 6c 65 2e 0a 5e 54 68 65 20 73 65 63 6f 6e  able..^The secon
f360: 64 20 69 6e 74 65 67 65 72 20 69 73 20 74 68 65  d integer is the
f370: 20 61 70 70 72 6f 78 69 6d 61 74 65 20 61 76 65   approximate ave
f380: 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72  rage number of r
f390: 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
f3a0: 0a 74 68 61 74 20 68 61 76 65 20 74 68 65 20 73  .that have the s
f3b0: 61 6d 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65  ame value in the
f3c0: 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66   first column of
f3d0: 20 74 68 65 20 69 6e 64 65 78 2e 20 20 5e 54 68   the index.  ^Th
f3e0: 65 20 74 68 69 72 64 20 0a 69 6e 74 65 67 65 72  e third .integer
f3f0: 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
f400: 61 74 65 20 61 76 65 72 61 67 65 20 6e 75 6d 62  ate average numb
f410: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
f420: 65 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76  e index that hav
f430: 65 20 0a 74 68 65 20 73 61 6d 65 20 76 61 6c 75  e .the same valu
f440: 65 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  e for the first 
f450: 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54  two columns.  ^T
f460: 68 65 20 4e 2d 74 68 20 69 6e 74 65 67 65 72 20  he N-th integer 
f470: 28 66 6f 72 20 4e 3e 31 29 20 0a 69 73 20 74 68  (for N>1) .is th
f480: 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 61 76  e approximate av
f490: 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  erage number of 
f4a0: 72 6f 77 73 20 69 6e 20 0a 74 68 65 20 69 6e 64  rows in .the ind
f4b0: 65 78 20 77 68 69 63 68 20 68 61 76 65 20 74 68  ex which have th
f4c0: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
f4d0: 20 74 68 65 20 66 69 72 73 74 20 4e 2d 31 20 63   the first N-1 c
f4e0: 6f 6c 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a 61 20  olumns.  ^For.a 
f4f0: 4b 2d 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2c 20  K-column index, 
f500: 74 68 65 72 65 20 77 69 6c 6c 20 62 65 20 4b 2b  there will be K+
f510: 31 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68  1 integers in th
f520: 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 2e 20 20  e stat column.  
f530: 5e 49 66 0a 74 68 65 20 69 6e 64 65 78 20 69 73  ^If.the index is
f540: 20 75 6e 69 71 75 65 2c 20 74 68 65 6e 20 74 68   unique, then th
f550: 65 20 6c 61 73 74 20 69 6e 74 65 67 65 72 20 77  e last integer w
f560: 69 6c 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e 5e 54  ill be 1...<p>^T
f570: 68 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67  he list of integ
f580: 65 72 73 20 69 6e 20 74 68 65 20 73 74 61 74 20  ers in the stat 
f590: 63 6f 6c 75 6d 6e 20 63 61 6e 20 6f 70 74 69 6f  column can optio
f5a0: 6e 61 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f 77 65  nally be followe
f5b0: 64 0a 62 79 20 61 72 67 75 6d 65 6e 74 73 2c 20  d.by arguments, 
f5c0: 65 61 63 68 20 6f 66 20 77 68 69 63 68 20 69 73  each of which is
f5d0: 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6e   a sequence of n
f5e0: 6f 6e 2d 73 70 61 63 65 20 63 68 61 72 61 63 74  on-space charact
f5f0: 65 72 73 2e 0a 5e 41 6c 6c 20 61 72 67 75 6d 65  ers..^All argume
f600: 6e 74 73 20 61 72 65 20 70 72 65 63 65 64 65 64  nts are preceded
f610: 20 62 79 20 61 20 73 69 6e 67 6c 65 20 73 70 61   by a single spa
f620: 63 65 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69 7a 65  ce..^Unrecognize
f630: 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  d arguments are 
f640: 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64  silently ignored
f650: 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 75  ...<p>^If the "u
f660: 6e 6f 72 64 65 72 65 64 22 20 61 72 67 75 6d 65  nordered" argume
f670: 6e 74 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  nt is present, t
f680: 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 70 6c  hen the query pl
f690: 61 6e 6e 65 72 20 61 73 73 75 6d 65 73 0a 74 68  anner assumes.th
f6a0: 61 74 20 74 68 65 20 69 6e 64 65 78 20 69 73 20  at the index is 
f6b0: 75 6e 6f 72 64 65 72 65 64 20 61 6e 64 20 77 69  unordered and wi
f6c0: 6c 6c 20 6e 6f 74 20 75 73 65 20 74 68 65 20 69  ll not use the i
f6d0: 6e 64 65 78 20 66 6f 72 20 61 20 72 61 6e 67 65  ndex for a range
f6e0: 20 71 75 65 72 79 0a 6f 72 20 66 6f 72 20 73 6f   query.or for so
f6f0: 72 74 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68 65 20  rting...<p>^The 
f700: 22 73 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d 65 6e  "sz=NNN" argumen
f710: 74 20 28 77 68 65 72 65 20 4e 4e 4e 20 72 65 70  t (where NNN rep
f720: 72 65 73 65 6e 74 73 20 61 20 73 65 71 75 65 6e  resents a sequen
f730: 63 65 20 6f 66 20 31 20 6f 72 20 6d 6f 72 65 20  ce of 1 or more 
f740: 64 69 67 69 74 73 29 0a 6d 65 61 6e 73 20 74 68  digits).means th
f750: 61 74 20 74 68 65 20 61 76 65 72 61 67 65 20 72  at the average r
f760: 6f 77 20 73 69 7a 65 20 6f 76 65 72 20 61 6c 6c  ow size over all
f770: 20 72 65 63 6f 72 64 73 20 6f 66 20 74 68 65 20   records of the 
f780: 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 69  table or.index i
f790: 73 20 4e 4e 4e 20 62 79 74 65 73 20 70 65 72 20  s NNN bytes per 
f7a0: 72 6f 77 2e 20 20 5e 54 68 65 20 53 51 4c 69 74  row.  ^The SQLit
f7b0: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
f7c0: 6d 69 67 68 74 20 75 73 65 20 74 68 65 0a 65 73  might use the.es
f7d0: 74 69 6d 61 74 65 64 20 72 6f 77 20 73 69 7a 65  timated row size
f7e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 6f   information pro
f7f0: 76 69 64 65 64 20 62 79 20 74 68 65 20 22 73 7a  vided by the "sz
f800: 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f 20 68  =NNN" token.to h
f810: 65 6c 70 20 69 74 20 63 68 6f 6f 73 65 20 73 6d  elp it choose sm
f820: 61 6c 6c 65 72 20 74 61 62 6c 65 73 20 61 6e 64  aller tables and
f830: 20 69 6e 64 65 78 65 73 20 74 68 61 74 20 72 65   indexes that re
f840: 71 75 69 72 65 20 6c 65 73 73 20 64 69 73 6b 20  quire less disk 
f850: 49 2f 4f 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70  I/O...<p>^(The p
f860: 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20 22  resence of the "
f870: 6e 6f 73 6b 69 70 73 63 61 6e 22 20 74 6f 6b 65  noskipscan" toke
f880: 6e 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  n on the sqlite_
f890: 73 74 61 74 31 2e 73 74 61 74 20 66 69 65 6c 64  stat1.stat field
f8a0: 0a 6f 66 20 61 6e 20 69 6e 64 65 78 20 70 72 65  .of an index pre
f8b0: 76 65 6e 74 73 20 74 68 61 74 20 69 6e 64 65 78  vents that index
f8c0: 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 73 65 64   from being used
f8d0: 20 77 69 74 68 20 74 68 65 0a 5b 73 6b 69 70 2d   with the.[skip-
f8e0: 73 63 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  scan optimizatio
f8f0: 6e 5d 2e 29 5e 0a 0a 3c 70 3e 4e 65 77 20 74 65  n].)^..<p>New te
f900: 78 74 20 74 6f 6b 65 6e 73 20 6d 61 79 20 62 65  xt tokens may be
f910: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 65 6e   added to the en
f920: 64 20 6f 66 20 74 68 65 20 73 74 61 74 20 63 6f  d of the stat co
f930: 6c 75 6d 6e 20 69 6e 20 66 75 74 75 72 65 0a 65  lumn in future.e
f940: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 74 6f 20 53  nhancements to S
f950: 51 4c 69 74 65 2e 20 20 46 6f 72 20 63 6f 6d 70  QLite.  For comp
f960: 61 74 69 62 69 6c 69 74 79 2c 20 75 6e 72 65 63  atibility, unrec
f970: 6f 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 73 20 61  ognized tokens a
f980: 74 20 74 68 65 20 65 6e 64 0a 6f 66 20 74 68 65  t the end.of the
f990: 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 61 72 65   stat column are
f9a0: 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65   silently ignore
f9b0: 64 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20  d...<p>^(If the 
f9c0: 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78  sqlite_stat1.idx
f9d0: 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2c   column is NULL,
f9e0: 20 74 68 65 6e 20 74 68 65 20 73 71 6c 69 74 65   then the sqlite
f9f0: 5f 73 74 61 74 31 2e 73 74 61 74 0a 63 6f 6c 75  _stat1.stat.colu
fa00: 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  mn contains a si
fa10: 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 77 68 69  ngle integer whi
fa20: 63 68 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  ch is the approx
fa30: 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 0a  imate number of.
fa40: 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
fa50: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
fa60: 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c  sqlite_stat1.tbl
fa70: 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
fa80: 67 6d 65 6e 74 20 73 74 61 74 32 74 61 62 20 7b  gment stat2tab {
fa90: 73 71 6c 69 74 65 5f 73 74 61 74 32 7d 3c 2f 74  sqlite_stat2}</t
faa0: 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 34 20 54 68  cl>.<h4>2.6.4 Th
fab0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
fac0: 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68  able</h4>..<p>Th
fad0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69  e sqlite_stat2 i
fae0: 73 20 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61  s only created a
faf0: 6e 64 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  nd is only used 
fb00: 69 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d  if SQLite is com
fb10: 70 69 6c 65 64 0a 77 69 74 68 20 53 51 4c 49 54  piled.with SQLIT
fb20: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 20 61  E_ENABLE_STAT2 a
fb30: 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  nd if the SQLite
fb40: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
fb50: 69 73 20 62 65 74 77 65 65 6e 0a 33 2e 36 2e 31  is between.3.6.1
fb60: 38 20 61 6e 64 20 33 2e 37 2e 38 2e 20 20 54 68  8 and 3.7.8.  Th
fb70: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
fb80: 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20  able is neither 
fb90: 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e  read nor written
fba0: 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20   by any.version 
fbb0: 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65  of SQLite before
fbc0: 20 33 2e 36 2e 31 38 20 6e 6f 72 20 61 66 74 65   3.6.18 nor afte
fbd0: 72 20 33 2e 37 2e 38 2e 0a 54 68 65 20 73 71 6c  r 3.7.8..The sql
fbe0: 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20  ite_stat2 table 
fbf0: 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f  contains additio
fc00: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  nal information.
fc10: 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69  about the distri
fc20: 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77  bution of keys w
fc30: 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2e 0a  ithin an index..
fc40: 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  The schema of th
fc50: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
fc60: 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f  able is as follo
fc70: 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ws:..<blockquote
fc80: 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
fc90: 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 32  BLE sqlite_stat2
fca0: 28 74 62 6c 2c 69 64 78 2c 73 61 6d 70 6c 65 6e  (tbl,idx,samplen
fcb0: 6f 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65  o,sample);.</pre
fcc0: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
fcd0: 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
fce0: 61 74 32 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 61  at2.idx column a
fcf0: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  nd the sqlite_st
fd00: 61 74 32 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69  at2.tbl column i
fd10: 6e 20 65 61 63 68 20 0a 72 6f 77 20 6f 66 20 74  n each .row of t
fd20: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
fd30: 74 61 62 6c 65 20 69 64 65 6e 74 69 66 79 20 61  table identify a
fd40: 6e 20 69 6e 64 65 78 20 64 65 73 63 72 69 62 65  n index describe
fd50: 64 20 62 79 20 74 68 61 74 20 72 6f 77 2e 0a 54  d by that row..T
fd60: 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79  here are usually
fd70: 20 31 30 20 72 6f 77 73 20 69 6e 20 74 68 65 20   10 rows in the 
fd80: 73 71 6c 69 74 65 5f 73 74 61 74 32 0a 74 61 62  sqlite_stat2.tab
fd90: 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65  le for each inde
fda0: 78 2e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  x...<p>The sqlit
fdb0: 65 5f 73 74 61 74 32 20 65 6e 74 72 69 65 73 20  e_stat2 entries 
fdc0: 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 74 68 61  for an index tha
fdd0: 74 20 68 61 76 65 20 73 71 6c 69 74 65 5f 73 74  t have sqlite_st
fde0: 61 74 32 2e 73 61 6d 70 6c 65 6e 6f 0a 62 65 74  at2.sampleno.bet
fdf0: 77 65 65 6e 20 30 20 61 6e 64 20 39 20 69 6e 63  ween 0 and 9 inc
fe00: 6c 75 73 69 76 65 20 61 72 65 20 73 61 6d 70 6c  lusive are sampl
fe10: 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
fe20: 6f 73 74 20 6b 65 79 20 76 61 6c 75 65 20 69 6e  ost key value in
fe30: 20 74 68 65 0a 69 6e 64 65 78 20 74 61 6b 65 6e   the.index taken
fe40: 20 61 74 20 65 76 65 6e 6c 79 20 73 70 61 63 65   at evenly space
fe50: 64 20 70 6f 69 6e 74 73 20 61 6c 6f 6e 67 20 74  d points along t
fe60: 68 65 20 69 6e 64 65 78 2e 0a 4c 65 74 20 43 20  he index..Let C 
fe70: 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  be the number of
fe80: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
fe90: 65 78 2e 0a 54 68 65 6e 20 74 68 65 20 73 61 6d  ex..Then the sam
fea0: 70 6c 65 64 20 72 6f 77 73 20 61 72 65 20 67 69  pled rows are gi
feb0: 76 65 6e 20 62 79 0a 0a 3c 62 6c 6f 63 6b 71 75  ven by..<blockqu
fec0: 6f 74 65 3e 0a 20 20 20 20 20 72 6f 77 6e 75 6d  ote>.     rownum
fed0: 62 65 72 20 3d 20 28 69 2a 43 2a 32 20 2b 20 43  ber = (i*C*2 + C
fee0: 29 2f 32 30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74  )/20.</blockquot
fef0: 65 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 72 69 61  e>..<p>The varia
ff00: 62 6c 65 20 69 20 69 6e 20 74 68 65 20 70 72 65  ble i in the pre
ff10: 76 69 6f 75 73 20 65 78 70 72 65 73 73 69 6f 6e  vious expression
ff20: 20 76 61 72 69 65 73 20 62 65 74 77 65 65 6e 20   varies between 
ff30: 30 20 61 6e 64 20 39 2e 0a 43 6f 6e 63 65 70 74  0 and 9..Concept
ff40: 75 61 6c 6c 79 2c 20 74 68 65 20 69 6e 64 65 78  ually, the index
ff50: 20 73 70 61 63 65 20 69 73 20 64 69 76 69 64 65   space is divide
ff60: 64 20 69 6e 74 6f 0a 31 30 20 75 6e 69 66 6f 72  d into.10 unifor
ff70: 6d 20 62 75 63 6b 65 74 73 20 61 6e 64 20 74 68  m buckets and th
ff80: 65 20 73 61 6d 70 6c 65 73 20 61 72 65 20 74 68  e samples are th
ff90: 65 20 6d 69 64 64 6c 65 20 72 6f 77 20 66 72 6f  e middle row fro
ffa0: 6d 20 65 61 63 68 20 62 75 63 6b 65 74 2e 0a 0a  m each bucket...
ffb0: 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 66 6f  <p>The format fo
ffc0: 72 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69  r sqlite_stat2 i
ffd0: 73 20 72 65 63 6f 72 64 65 64 20 68 65 72 65 20  s recorded here 
ffe0: 66 6f 72 20 6c 65 67 61 63 79 20 72 65 66 65 72  for legacy refer
fff0: 65 6e 63 65 2e 20 20 0a 52 65 63 65 6e 74 20 76  ence.  .Recent v
10000 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
10010 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70  e no longer supp
10020 6f 72 74 20 73 71 6c 69 74 65 5f 73 74 61 74 32  ort sqlite_stat2
10030 20 61 6e 64 20 74 68 65 0a 73 71 6c 69 74 65 5f   and the.sqlite_
10040 73 74 61 74 32 20 74 61 62 6c 65 2c 20 69 74 20  stat2 table, it 
10050 69 73 20 65 78 69 73 74 73 2c 20 69 73 20 73 69  is exists, is si
10060 6d 70 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c  mply ignored...<
10070 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
10080 73 74 61 74 33 74 61 62 20 7b 73 71 6c 69 74 65  stat3tab {sqlite
10090 5f 73 74 61 74 33 7d 20 53 51 4c 49 54 45 5f 53  _stat3} SQLITE_S
100a0 54 41 54 33 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32  TAT3</tcl>.<h4>2
100b0 2e 36 2e 35 20 54 68 65 20 73 71 6c 69 74 65 5f  .6.5 The sqlite_
100c0 73 74 61 74 33 20 74 61 62 6c 65 3c 2f 68 34 3e  stat3 table</h4>
100d0 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
100e0 73 74 61 74 33 20 69 73 20 6f 6e 6c 79 20 75 73  stat3 is only us
100f0 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  ed if SQLite is 
10100 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b 53  compiled.with [S
10110 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
10120 54 33 5d 20 6f 72 20 5b 53 51 4c 49 54 45 5f 45  T3] or [SQLITE_E
10130 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a 61 6e 64  NABLE_STAT4].and
10140 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 76   if the SQLite v
10150 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73  ersion number is
10160 20 33 2e 37 2e 39 20 6f 72 20 67 72 65 61 74 65   3.7.9 or greate
10170 72 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  r..The sqlite_st
10180 61 74 33 20 74 61 62 6c 65 20 69 73 20 6e 65 69  at3 table is nei
10190 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72  ther read nor wr
101a0 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72  itten by any.ver
101b0 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62  sion of SQLite b
101c0 65 66 6f 72 65 20 33 2e 37 2e 39 2e 0a 49 66 20  efore 3.7.9..If 
101d0 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  the [SQLITE_ENAB
101e0 4c 45 5f 53 54 41 54 34 5d 20 63 6f 6d 70 69 6c  LE_STAT4] compil
101f0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
10200 20 75 73 65 64 20 61 6e 64 20 74 68 65 0a 53 51   used and the.SQ
10210 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d  Lite version num
10220 62 65 72 20 69 73 20 33 2e 38 2e 31 20 6f 72 20  ber is 3.8.1 or 
10230 67 72 65 61 74 65 72 2c 20 74 68 65 6e 20 73 71  greater, then sq
10240 6c 69 74 65 5f 73 74 61 74 33 20 6d 69 67 68 74  lite_stat3 might
10250 0a 62 65 20 72 65 61 64 20 62 75 74 20 6e 6f 74  .be read but not
10260 20 77 72 69 74 74 65 6e 2e 0a 54 68 65 20 73 71   written..The sq
10270 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
10280 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69   contains additi
10290 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
102a0 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72  .about the distr
102b0 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20  ibution of keys 
102c0 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2c  within an index,
102d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
102e0 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e  t the.query plan
102f0 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20 64  ner can use to d
10300 65 76 69 73 65 20 62 65 74 74 65 72 20 61 6e 64  evise better and
10310 20 66 61 73 74 65 72 20 71 75 65 72 79 20 61 6c   faster query al
10320 67 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20  gorithms..^(The 
10330 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71  schema of the sq
10340 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
10350 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
10360 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
10370 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
10380 73 71 6c 69 74 65 5f 73 74 61 74 33 28 74 62 6c  sqlite_stat3(tbl
10390 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c  ,idx,nEq,nLt,nDL
103a0 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65  t,sample);.</pre
103b0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
103c0 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 75  ..<p>There are u
103d0 73 75 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65 20  sually multiple 
103e0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 73  entries in the s
103f0 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
10400 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78  e for each index
10410 2e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  ..^(The sqlite_s
10420 74 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c 75  tat3.sample colu
10430 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c  mn holds the val
10440 75 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  ue of the left-m
10450 6f 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e 0a  ost field of an.
10460 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64  index identified
10470 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74 33   by sqlite_stat3
10480 2e 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65 5f  .idx and sqlite_
10490 73 74 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e 28 54  stat3.tbl.)^.^(T
104a0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  he sqlite_stat3.
104b0 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  nEq column holds
104c0 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
104d0 0a 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69  .number of entri
104e0 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  es in the index 
104f0 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20  whose left-most 
10500 63 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79 20 6d  column exactly m
10510 61 74 63 68 65 73 0a 74 68 65 20 73 61 6d 70 6c  atches.the sampl
10520 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74  e.)^.^(The sqlit
10530 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c 64  e_stat3.nLt hold
10540 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
10550 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
10560 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65 78  ies in the.index
10570 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74   whose left-most
10580 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73 20   column is less 
10590 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c 65 2e  than the sample.
105a0 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  )^.^(The sqlite_
105b0 73 74 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d  stat3.nDLt colum
105c0 6e 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72  n holds the appr
105d0 6f 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f  oximate.number o
105e0 66 20 64 69 73 74 69 6e 63 74 20 6c 65 66 74 2d  f distinct left-
105f0 6d 6f 73 74 20 65 6e 74 72 69 65 73 20 69 6e 20  most entries in 
10600 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 61  the index that a
10610 72 65 20 6c 65 73 73 20 74 68 61 6e 0a 74 68 65  re less than.the
10620 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e   sample.)^..<p>^
10630 54 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e 20  There can be an 
10640 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65 72  arbitrary number
10650 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74 33   of sqlite_stat3
10660 20 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e 64   entries per ind
10670 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45  ex..The [ANALYZE
10680 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74  ] command will t
10690 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  ypically generat
106a0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
106b0 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74 61  ables.that conta
106c0 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61 6e  in between 10 an
106d0 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68 61  d 40 samples tha
106e0 74 20 61 72 65 20 64 69 73 74 72 69 62 75 74 65  t are distribute
106f0 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65 79  d across.the key
10700 20 73 70 61 63 65 20 61 6e 64 20 77 69 74 68 20   space and with 
10710 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65 73  large nEq values
10720 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65 6c  ...<p>^(In a wel
10730 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74 65 5f  l-formed sqlite_
10740 73 74 61 74 33 20 74 61 62 6c 65 2c 20 74 68 65  stat3 table, the
10750 20 73 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e 79   samples for any
10760 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d 75   single.index mu
10770 73 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  st appear in the
10780 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68 61 74   same order that
10790 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20 74   they occur in t
107a0 68 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20 6f  he index.  .In o
107b0 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
107c0 68 65 20 65 6e 74 72 79 20 77 69 74 68 20 6c 65  he entry with le
107d0 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 53  ft-most column S
107e0 31 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e 0a  1 is earlier in.
107f0 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65  the index b-tree
10800 20 74 68 61 6e 20 74 68 65 0a 65 6e 74 72 79 20   than the.entry 
10810 77 69 74 68 20 6c 65 66 2d 6d 6f 73 74 20 63 6f  with lef-most co
10820 6c 75 6d 6e 20 53 32 2c 20 74 68 65 6e 20 69 6e  lumn S2, then in
10830 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10840 33 20 74 61 62 6c 65 2c 20 0a 73 61 6d 70 6c 65  3 table, .sample
10850 20 53 31 20 6d 75 73 74 20 68 61 76 65 20 61 20   S1 must have a 
10860 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68  smaller rowid th
10870 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a  an sample S2.)^.
10880 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
10890 74 20 73 74 61 74 34 74 61 62 20 7b 73 71 6c 69  t stat4tab {sqli
108a0 74 65 5f 73 74 61 74 34 7d 20 53 51 4c 49 54 45  te_stat4} SQLITE
108b0 5f 53 54 41 54 34 3c 2f 74 63 6c 3e 0a 3c 68 34  _STAT4</tcl>.<h4
108c0 3e 32 2e 36 2e 36 20 54 68 65 20 73 71 6c 69 74  >2.6.6 The sqlit
108d0 65 5f 73 74 61 74 34 20 74 61 62 6c 65 3c 2f 68  e_stat4 table</h
108e0 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  4>..<p>The sqlit
108f0 65 5f 73 74 61 74 34 20 69 73 20 6f 6e 6c 79 20  e_stat4 is only 
10900 63 72 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f  created and is o
10910 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c 69  nly used if SQLi
10920 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77  te is compiled.w
10930 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  ith [SQLITE_ENAB
10940 4c 45 5f 53 54 41 54 34 5d 20 61 6e 64 20 69 66  LE_STAT4] and if
10950 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73   the SQLite vers
10960 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 0a 33 2e  ion number is.3.
10970 38 2e 31 20 6f 72 20 67 72 65 61 74 65 72 2e 20  8.1 or greater. 
10980 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   The sqlite_stat
10990 34 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68  4 table is neith
109a0 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74  er read nor writ
109b0 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69  ten by any.versi
109c0 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66  on of SQLite bef
109d0 6f 72 65 20 33 2e 38 2e 31 2e 0a 54 68 65 20 73  ore 3.8.1..The s
109e0 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
109f0 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74  e contains addit
10a00 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
10a10 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74  n.about the dist
10a20 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73  ribution of keys
10a30 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78   within an index
10a40 20 6f 72 20 74 68 65 20 64 69 73 74 72 69 62 75   or the distribu
10a50 74 69 6f 6e 20 6f 66 0a 6b 65 79 73 20 69 6e 20  tion of.keys in 
10a60 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
10a70 6f 66 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  of a [WITHOUT RO
10a80 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20  WID] table..The 
10a90 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61  query planner ca
10aa0 6e 20 73 6f 6d 65 74 69 6d 65 73 20 75 73 65 20  n sometimes use 
10ab0 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  the additional i
10ac0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 0a 74 68  nformation in.th
10ad0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
10ae0 61 62 6c 65 20 74 6f 20 64 65 76 69 73 65 20 62  able to devise b
10af0 65 74 74 65 72 20 61 6e 64 20 66 61 73 74 65 72  etter and faster
10b00 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74 68 6d   query algorithm
10b10 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20  s..^(The schema 
10b20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
10b30 61 74 34 20 74 61 62 6c 65 20 69 73 20 61 73 20  at4 table is as 
10b40 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b  follows:..<block
10b50 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
10b60 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
10b70 73 74 61 74 34 28 74 62 6c 2c 69 64 78 2c 6e 45  stat4(tbl,idx,nE
10b80 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c  q,nLt,nDLt,sampl
10b90 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  e);.</pre></bloc
10ba0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68  kquote>)^..<p>Th
10bb0 65 72 65 20 61 72 65 20 74 79 70 69 63 61 6c 6c  ere are typicall
10bc0 79 20 62 65 74 77 65 65 6e 20 31 30 20 74 6f 20  y between 10 to 
10bd0 34 30 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  40 entries in th
10be0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
10bf0 61 62 6c 65 20 66 6f 72 0a 65 61 63 68 20 69 6e  able for.each in
10c00 64 65 78 20 66 6f 72 20 77 68 69 63 68 20 73 74  dex for which st
10c10 61 74 69 73 74 69 63 73 20 61 72 65 20 61 76 61  atistics are ava
10c20 69 6c 61 62 6c 65 2c 20 68 6f 77 65 76 65 72 20  ilable, however 
10c30 74 68 65 73 65 20 6c 69 6d 69 74 73 20 61 72 65  these limits are
10c40 0a 6e 6f 74 20 68 61 72 64 20 62 6f 75 6e 64 73  .not hard bounds
10c50 2e 0a 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  ..The meanings o
10c60 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
10c70 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10c80 34 20 74 61 62 6c 65 20 61 72 65 20 61 73 20 66  4 table are as f
10c90 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72  ollows:..<center
10ca0 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
10cb0 22 30 22 20 77 69 64 74 68 3d 22 31 30 30 25 22  "0" width="100%"
10cc0 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30   cellpadding="10
10cd0 22 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ">.<tr><td valig
10ce0 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
10cf0 69 67 68 74 22 3e 74 62 6c 3a 3c 2f 74 64 3e 0a  ight">tbl:</td>.
10d00 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71      <td>^(The sq
10d10 6c 69 74 65 5f 73 74 61 74 34 2e 74 62 6c 20 63  lite_stat4.tbl c
10d20 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65  olumn holds name
10d30 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
10d40 61 74 20 6f 77 6e 73 0a 20 20 20 20 74 68 65 20  at owns.    the 
10d50 69 6e 64 65 78 20 74 68 61 74 20 74 68 65 20 72  index that the r
10d60 6f 77 20 64 65 73 63 72 69 62 65 73 29 5e 0a 0a  ow describes)^..
10d70 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22  <tr><td valign="
10d80 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
10d90 74 22 3e 69 64 78 3a 3c 2f 74 64 3e 0a 20 20 20  t">idx:</td>.   
10da0 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74   <td>^(The sqlit
10db0 65 5f 73 74 61 74 34 2e 69 64 78 20 63 6f 6c 75  e_stat4.idx colu
10dc0 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66  mn holds name of
10dd0 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
10de0 74 68 65 0a 20 20 20 20 72 6f 77 20 64 65 73 63  the.    row desc
10df0 72 69 62 65 73 2c 20 6f 72 20 69 6e 20 74 68 65  ribes, or in the
10e00 20 63 61 73 65 20 6f 66 0a 20 20 20 20 61 6e 20   case of.    an 
10e10 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e 74  sqlite_stat4 ent
10e20 72 79 20 66 6f 72 20 61 20 5b 57 49 54 48 4f 55  ry for a [WITHOU
10e30 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20  T ROWID] table, 
10e40 74 68 65 0a 20 20 20 20 6e 61 6d 65 20 6f 66 20  the.    name of 
10e50 74 68 65 20 74 61 62 6c 65 20 69 74 73 65 6c 66  the table itself
10e60 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  .)^..<tr><td val
10e70 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
10e80 22 72 69 67 68 74 22 3e 73 61 6d 70 6c 65 3a 3c  "right">sample:<
10e90 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
10ea0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
10eb0 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f  sample column ho
10ec0 6c 64 73 20 61 20 42 4c 4f 42 0a 20 20 20 20 69  lds a BLOB.    i
10ed0 6e 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f  n the [record fo
10ee0 72 6d 61 74 5d 20 74 68 61 74 20 65 6e 63 6f 64  rmat] that encod
10ef0 65 73 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  es the indexed c
10f00 6f 6c 75 6d 6e 73 20 66 6f 6c 6c 6f 77 65 64 20  olumns followed 
10f10 62 79 0a 20 20 20 20 74 68 65 20 72 6f 77 69 64  by.    the rowid
10f20 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62   for a rowid tab
10f30 6c 65 20 6f 72 20 62 79 20 74 68 65 20 63 6f 6c  le or by the col
10f40 75 6d 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d  umns of the prim
10f50 61 72 79 20 6b 65 79 20 0a 20 20 20 20 66 6f 72  ary key .    for
10f60 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44   a WITHOUT ROWID
10f70 20 74 61 62 6c 65 2e 29 5e 0a 20 20 20 20 5e 28   table.)^.    ^(
10f80 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
10f90 2e 73 61 6d 70 6c 65 20 42 4c 4f 42 20 66 6f 72  .sample BLOB for
10fa0 20 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57   the WITHOUT ROW
10fb0 49 44 20 74 61 62 6c 65 20 69 74 73 65 6c 66 20  ID table itself 
10fc0 0a 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 6a 75  .    contains ju
10fd0 73 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  st the columns o
10fe0 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
10ff0 79 2e 29 5e 0a 20 20 20 20 4c 65 74 20 74 68 65  y.)^.    Let the
11000 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
11010 6e 73 20 65 6e 63 6f 64 65 64 20 62 79 20 74 68  ns encoded by th
11020 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73  e sqlite_stat4.s
11030 61 6d 70 6c 65 20 62 6c 6f 62 20 62 65 20 4e 2e  ample blob be N.
11040 0a 20 20 20 20 5e 46 6f 72 20 69 6e 64 65 78 65  .    ^For indexe
11050 73 20 6f 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79  s on an ordinary
11060 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 4e 20   rowid table, N 
11070 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65  will be one more
11080 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72   than the number
11090 20 0a 20 20 20 20 6f 66 20 63 6f 6c 75 6d 6e 73   .    of columns
110a0 20 69 6e 64 65 78 65 64 2e 0a 20 20 20 20 5e 46   indexed..    ^F
110b0 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e 20 57 49  or indexes on WI
110c0 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
110d0 65 73 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68  es, N will be th
110e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
110f0 6d 6e 73 0a 20 20 20 20 69 6e 64 65 78 65 64 20  mns.    indexed 
11100 70 6c 75 73 20 74 68 65 20 6e 75 6d 62 65 72 20  plus the number 
11110 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
11120 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 20  e primary key.. 
11130 20 20 20 5e 46 6f 72 20 61 20 57 49 54 48 4f 55     ^For a WITHOU
11140 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 4e  T ROWID table, N
11150 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d   will be the num
11160 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
11170 6e 20 74 68 65 0a 20 20 20 20 70 72 69 6d 61 72  n the.    primar
11180 79 20 6b 65 79 2e 0a 0a 3c 74 72 3e 3c 74 64 20  y key...<tr><td 
11190 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
111a0 67 6e 3d 22 72 69 67 68 74 22 3e 6e 45 71 3a 3c  gn="right">nEq:<
111b0 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
111c0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
111d0 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  nEq column holds
111e0 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74   a list of N int
111f0 65 67 65 72 73 20 77 68 65 72 65 20 0a 20 20 20  egers where .   
11200 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65   the K-th intege
11210 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69  r is the approxi
11220 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65  mate number of e
11230 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
11240 64 65 78 0a 20 20 20 20 77 68 6f 73 65 20 6c 65  dex.    whose le
11250 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e  ft-most K column
11260 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  s exactly match 
11270 74 68 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20  the K left-most 
11280 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 6f 66 20 74  columns.    of t
11290 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74  he sample.)^..<t
112a0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
112b0 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
112c0 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c  >nLt:</td>.    <
112d0 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  td>^(The sqlite_
112e0 73 74 61 74 34 2e 6e 4c 74 20 63 6f 6c 75 6d 6e  stat4.nLt column
112f0 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66   holds a list of
11300 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65 72   N integers wher
11310 65 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69  e.    the K-th i
11320 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70  nteger is the ap
11330 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
11340 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74   of entries in t
11350 68 65 0a 20 20 20 20 69 6e 64 65 78 20 77 68 6f  he.    index who
11360 73 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63  se K left-most c
11370 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65  olumns are colle
11380 63 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61  ctively less tha
11390 6e 20 74 68 65 20 0a 20 20 20 20 4b 20 6c 65 66  n the .    K lef
113a0 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 6f  t-most columns o
113b0 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a  f the sample.)^.
113c0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
113d0 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
113e0 68 74 22 3e 6e 44 4c 74 3a 3c 2f 74 64 3e 0a 20  ht">nDLt:</td>. 
113f0 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
11400 69 74 65 5f 73 74 61 74 34 2e 6e 44 4c 74 20 63  ite_stat4.nDLt c
11410 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69  olumn holds a li
11420 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73  st of N integers
11430 20 77 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b   where.    the K
11440 2d 74 68 20 69 6e 74 65 67 65 72 73 20 69 73 20  -th integers is 
11450 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a  the approximate.
11460 20 20 20 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e      number of en
11470 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64  tries in the ind
11480 65 78 20 74 68 61 74 20 61 72 65 20 64 69 73 74  ex that are dist
11490 69 6e 63 74 20 69 6e 20 74 68 65 20 66 69 72 73  inct in the firs
114a0 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 0a  t K columns and.
114b0 20 20 20 20 74 68 61 74 20 61 72 65 20 77 68 6f      that are who
114c0 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63  se left-most K c
114d0 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65  olumns are colle
114e0 63 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61  ctively less tha
114f0 6e 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a  n the left-most.
11500 20 20 20 20 4b 20 63 6f 6c 75 6d 6e 73 20 6f 66      K columns of
11510 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 3c   the sample.)^.<
11520 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
11530 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  >..<p>The sqlite
11540 5f 73 74 61 74 34 20 69 73 20 61 20 67 65 6e 65  _stat4 is a gene
11550 72 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68  ralization of th
11560 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
11570 61 62 6c 65 2e 20 20 54 68 65 0a 73 71 6c 69 74  able.  The.sqlit
11580 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 70 72  e_stat3 table pr
11590 6f 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69  ovides informati
115a0 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 6c 65 66  on about the lef
115b0 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66  t-most column of
115c0 20 61 6e 0a 69 6e 64 65 78 20 77 68 65 72 65 61   an.index wherea
115d0 73 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  s the sqlite_sta
115e0 74 34 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65  t4 table provide
115f0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
11600 6f 75 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a  out all columns.
11610 6f 66 20 74 68 65 20 69 6e 64 65 78 2e 0a 0a 3c  of the index...<
11620 70 3e 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20  p>^There can be 
11630 61 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d  an arbitrary num
11640 62 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74  ber of sqlite_st
11650 61 74 34 20 65 6e 74 72 69 65 73 20 70 65 72 20  at4 entries per 
11660 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c  index..The [ANAL
11670 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c  YZE] command wil
11680 6c 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65  l typically gene
11690 72 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74  rate sqlite_stat
116a0 34 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f  4 tables.that co
116b0 6e 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30  ntain between 10
116c0 20 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20   and 40 samples 
116d0 74 68 61 74 20 61 72 65 20 64 69 73 74 72 69 62  that are distrib
116e0 75 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20  uted across.the 
116f0 6b 65 79 20 73 70 61 63 65 20 61 6e 64 20 77 69  key space and wi
11700 74 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c  th large nEq val
11710 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20  ues...<p>^(In a 
11720 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69  well-formed sqli
11730 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20  te_stat4 table, 
11740 74 68 65 20 73 61 6d 70 6c 65 73 20 66 6f 72 20  the samples for 
11750 61 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78  any single.index
11760 20 6d 75 73 74 20 61 70 70 65 61 72 20 69 6e 20   must appear in 
11770 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74  the same order t
11780 68 61 74 20 74 68 65 79 20 6f 63 63 75 72 20 69  hat they occur i
11790 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 20 0a 49  n the index.  .I
117a0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
117b0 66 20 65 6e 74 72 79 20 53 31 20 69 73 20 65 61  f entry S1 is ea
117c0 72 6c 69 65 72 20 69 6e 20 74 68 65 20 69 6e 64  rlier in the ind
117d0 65 78 20 62 2d 74 72 65 65 20 74 68 61 6e 20 0a  ex b-tree than .
117e0 65 6e 74 72 79 20 53 32 2c 20 74 68 65 6e 20 69  entry S2, then i
117f0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
11800 74 34 20 74 61 62 6c 65 2c 20 73 61 6d 70 6c 65  t4 table, sample
11810 20 53 31 20 6d 75 73 74 20 68 61 76 65 20 61 0a   S1 must have a.
11820 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68  smaller rowid th
11830 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a  an sample S2.)^.
11840 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
11850 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e 61  t rollbackjourna
11860 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  l {rollback jour
11870 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c  nal format}</tcl
11880 3e 0a 3c 68 32 3e 33 2e 30 20 54 68 65 20 52 6f  >.<h2>3.0 The Ro
11890 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f  llback Journal</
118a0 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c  h2>..<p>The roll
118b0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20  back journal is 
118c0 61 20 66 69 6c 65 20 61 73 73 6f 63 69 61 74 65  a file associate
118d0 64 20 77 69 74 68 20 65 61 63 68 20 53 51 4c 69  d with each SQLi
118e0 74 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  te database.file
118f0 20 74 68 61 74 20 68 6f 6c 64 20 69 6e 66 6f 72   that hold infor
11900 6d 61 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 72  mation used to r
11910 65 73 74 6f 72 65 20 74 68 65 20 64 61 74 61 62  estore the datab
11920 61 73 65 20 66 69 6c 65 20 74 6f 20 69 74 73 20  ase file to its 
11930 69 6e 69 74 69 61 6c 0a 73 74 61 74 65 20 64 75  initial.state du
11940 72 69 6e 67 20 74 68 65 20 63 6f 75 72 73 65 20  ring the course 
11950 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  of a transaction
11960 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  ..^The rollback 
11970 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69 73 20  journal file is 
11980 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69  always located i
11990 6e 20 74 68 65 20 73 61 6d 65 20 0a 64 69 72 65  n the same .dire
119a0 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74  ctory as the dat
119b0 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68  abase.file and h
119c0 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
119d0 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
119e0 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20 74   file but with t
119f0 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d  he string."<tt>-
11a00 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61 70  journal</tt>" ap
11a10 70 65 6e 64 65 64 2e 20 20 54 68 65 72 65 20 63  pended.  There c
11a20 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73 69 6e  an only be a sin
11a30 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  gle rollback jou
11a40 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65 64 20  rnal.associated 
11a50 77 69 74 68 20 61 20 67 69 76 65 20 64 61 74 61  with a give data
11a60 62 61 73 65 20 61 6e 64 20 68 65 6e 63 65 20 74  base and hence t
11a70 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
11a80 20 6f 6e 65 20 77 72 69 74 65 0a 74 72 61 6e 73   one write.trans
11a90 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61 69  action open agai
11aa0 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 64 61 74  nst a single dat
11ab0 61 62 61 73 65 20 61 74 20 6f 6e 65 20 74 69 6d  abase at one tim
11ac0 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20  e.</p>..<p>If a 
11ad0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
11ae0 62 6f 72 74 65 64 20 64 75 65 20 74 6f 20 61 6e  borted due to an
11af0 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 72 61   application cra
11b00 73 68 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e 67  sh, an operating
11b10 0a 73 79 73 74 65 6d 20 63 72 61 73 68 2c 20 6f  .system crash, o
11b20 72 20 61 20 68 61 72 64 77 61 72 65 20 70 6f 77  r a hardware pow
11b30 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63 72  er failure or cr
11b40 61 73 68 2c 20 74 68 65 6e 20 74 68 65 20 64 61  ash, then the da
11b50 74 61 62 61 73 65 20 6d 61 79 0a 62 65 20 6c 65  tabase may.be le
11b60 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69  ft in an inconsi
11b70 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20 5e 54  stent state.  ^T
11b80 68 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51 4c  he next time SQL
11b90 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20  ite attempts to 
11ba0 6f 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73  open.the databas
11bb0 65 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65 73  e file, the pres
11bc0 65 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c 6c  ence of the roll
11bd0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
11be0 65 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65 63  e will be .detec
11bf0 74 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75 72  ted and the jour
11c00 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74 6f  nal will be auto
11c10 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65 64  matically played
11c20 20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72 65   back to restore
11c30 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f   the.database to
11c40 20 69 74 73 20 73 74 61 74 65 20 61 74 20 74 68   its state at th
11c50 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 69  e start of the i
11c60 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61  ncomplete transa
11c70 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  ction.</p>..<p>^
11c80 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  A rollback journ
11c90 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69  al is only consi
11ca0 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69  dered to be vali
11cb0 64 20 69 66 20 69 74 20 65 78 69 73 74 73 20 61  d if it exists a
11cc0 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76 61  nd.contains a va
11cd0 6c 69 64 20 68 65 61 64 65 72 2e 20 20 48 65 6e  lid header.  Hen
11ce0 63 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ce a transaction
11cf0 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74 65   can be committe
11d00 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72 65  d in one.of thre
11d10 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69  e ways:.<ol>.<li
11d20 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  >^(The rollback 
11d30 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e  journal file can
11d40 20 62 65 20 64 65 6c 65 74 65 64 29 5e 2c 0a 3c   be deleted)^,.<
11d50 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63  li>^(The rollbac
11d60 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63  k journal file c
11d70 61 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64 20  an be truncated 
11d80 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 29 5e  to zero length)^
11d90 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65 20 68  , or.<li>^(The h
11da0 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6c  eader of the rol
11db0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61  lback journal ca
11dc0 6e 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  n be overwritten
11dd0 20 77 69 74 68 0a 69 6e 76 61 6c 69 64 20 68 65   with.invalid he
11de0 61 64 65 72 20 74 65 78 74 20 28 66 6f 72 20 65  ader text (for e
11df0 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f  xample, all zero
11e00 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 5e 54 68 65  s).)^.</ol>.^The
11e10 73 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66  se three ways of
11e20 20 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72   committing a tr
11e30 61 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65 73  ansaction corres
11e40 70 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c 45  pond to the DELE
11e50 54 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61 6e  TE,.TRUNCATE, an
11e60 64 20 50 45 52 53 49 53 54 20 73 65 74 74 69 6e  d PERSIST settin
11e70 67 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  gs, respectively
11e80 2c 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e 61  , of the [journa
11e90 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e 0a  l_mode pragma]..
11ea0 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69  </p>...<p>A vali
11eb0 64 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  d rollback journ
11ec0 61 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  al begins with a
11ed0 20 68 65 61 64 65 72 20 69 6e 20 74 68 65 20 66   header in the f
11ee0 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 3a  ollowing format:
11ef0 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  </p>..<center>.<
11f00 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e  i>Rollback Journ
11f10 61 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  al Header Format
11f20 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
11f30 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
11f40 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  er=1>.<tr><th>Of
11f50 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
11f60 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
11f70 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11f80 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20  lign=center>0.  
11f90 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
11fa0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a   align=center>8.
11fb0 20 20 20 20 3c 74 64 3e 48 65 61 64 65 72 20 73      <td>Header s
11fc0 74 72 69 6e 67 3a 20 20 30 78 64 39 2c 20 30 78  tring:  0xd9, 0x
11fd0 64 35 2c 20 30 78 30 35 2c 20 30 78 66 39 2c 20  d5, 0x05, 0xf9, 
11fe0 30 78 32 30 2c 20 30 78 61 31 2c 20 30 78 36 33  0x20, 0xa1, 0x63
11ff0 2c 20 30 78 64 37 0a 3c 74 72 3e 3c 74 64 20 76  , 0xd7.<tr><td v
12000 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12010 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64  center>8.    <td
12020 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12030 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12040 74 64 3e 54 68 65 20 22 50 61 67 65 20 43 6f 75  td>The "Page Cou
12050 6e 74 22 20 2d 20 54 68 65 20 6e 75 6d 62 65 72  nt" - The number
12060 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
12070 20 6e 65 78 74 20 73 65 67 6d 65 6e 74 20 6f 66   next segment of
12080 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 6a 6f   the .        jo
12090 75 72 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a  urnal, or -1 to.
120a0 20 20 20 20 20 20 20 20 6d 65 61 6e 20 61 6c 6c          mean all
120b0 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65 20   content to the 
120c0 65 6e 64 20 6f 66 20 74 68 65 20 66 69 6c 65 0a  end of the file.
120d0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
120e0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
120f0 31 32 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  12.    <td valig
12100 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12110 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20 72  er>4.    <td>A r
12120 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20  andom nonce for 
12130 74 68 65 20 63 68 65 63 6b 73 75 6d 0a 3c 74 72  the checksum.<tr
12140 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12150 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 0a  align=center>16.
12160 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
12170 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12180 34 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74 69 61  4.    <td>Initia
12190 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  l size of the da
121a0 74 61 62 61 73 65 20 69 6e 20 70 61 67 65 73 0a  tabase in pages.
121b0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
121c0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
121d0 32 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  20.    <td valig
121e0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
121f0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a  er>4.    <td>Siz
12200 65 20 6f 66 20 61 20 64 69 73 6b 20 73 65 63 74  e of a disk sect
12210 6f 72 20 61 73 73 75 6d 65 64 20 62 79 20 74 68  or assumed by th
12220 65 20 70 72 6f 63 65 73 73 20 74 68 61 74 20 77  e process that w
12230 72 6f 74 65 20 74 68 69 73 0a 20 20 20 20 20 20  rote this.      
12240 20 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 74 72 3e 3c    journal..<tr><
12250 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12260 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20 20  ign=center>24.  
12270 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
12280 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
12290 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20      <td>Size of 
122a0 70 61 67 65 73 20 69 6e 20 74 68 69 73 20 6a 6f  pages in this jo
122b0 75 72 6e 61 6c 2e 0a 3c 2f 74 61 62 6c 65 3e 0a  urnal..</table>.
122c0 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41  </center>..<p>^A
122d0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
122e0 6c 20 68 65 61 64 65 72 20 69 73 20 70 61 64 64  l header is padd
122f0 65 64 20 77 69 74 68 20 7a 65 72 6f 73 20 6f 75  ed with zeros ou
12300 74 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66  t to the size of
12310 20 61 20 0a 73 69 6e 67 6c 65 20 73 65 63 74 6f   a .single secto
12320 72 20 28 61 73 20 64 65 66 69 6e 65 64 20 62 79  r (as defined by
12330 20 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65   the sector size
12340 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
12350 65 74 20 32 30 29 2e 0a 54 68 65 20 68 65 61 64  et 20)..The head
12360 65 72 20 69 73 20 69 6e 20 61 20 73 65 63 74 6f  er is in a secto
12370 72 20 62 79 20 69 74 73 65 6c 66 20 73 6f 20 74  r by itself so t
12380 68 61 74 20 69 66 20 61 20 70 6f 77 65 72 20 6c  hat if a power l
12390 6f 73 73 20 6f 63 63 75 72 73 20 77 68 69 6c 65  oss occurs while
123a0 0a 77 72 69 74 69 6e 67 20 74 68 65 20 73 65 63  .writing the sec
123b0 74 6f 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tor, information
123c0 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68   that follows th
123d0 65 20 68 65 61 64 65 72 20 77 69 6c 6c 20 62 65  e header will be
123e0 0a 28 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e 64  .(hopefully) und
123f0 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  amaged.</p>..<p>
12400 5e 41 66 74 65 72 20 74 68 65 20 68 65 61 64 65  ^After the heade
12410 72 20 61 6e 64 20 7a 65 72 6f 20 70 61 64 64 69  r and zero paddi
12420 6e 67 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d  ng are zero or m
12430 6f 72 65 20 70 61 67 65 20 72 65 63 6f 72 64 73  ore page records
12440 2e 20 20 5e 45 61 63 68 0a 70 61 67 65 20 72 65  .  ^Each.page re
12450 63 6f 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f  cord stores a co
12460 70 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  py of the conten
12470 74 20 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d  t of a page from
12480 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
12490 6c 65 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73  le.before it was
124a0 20 63 68 61 6e 67 65 64 2e 20 20 5e 54 68 65 20   changed.  ^The 
124b0 73 61 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f  same page may no
124c0 74 20 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68  t appear more th
124d0 61 6e 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61  an once.within a
124e0 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b   single rollback
124f0 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c   journal..To rol
12500 6c 62 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c  lback an incompl
12510 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ete transaction,
12520 20 61 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d   a process.has m
12530 65 72 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68  erely to read th
12540 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
12550 61 6c 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  al from beginnin
12560 67 20 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69  g to end and.wri
12570 74 65 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69  te pages found i
12580 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61  n the journal ba
12590 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ck into the data
125a0 62 61 73 65 20 66 69 6c 65 20 61 74 20 74 68 65  base file at the
125b0 0a 61 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63  .appropriate loc
125c0 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c  ation.</p>..<p>L
125d0 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  et the database 
125e0 70 61 67 65 20 73 69 7a 65 20 28 74 68 65 20 76  page size (the v
125f0 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
12600 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 34  ger at offset 24
12610 20 0a 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c   .in the journal
12620 20 68 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54   header) be N..T
12630 68 65 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  hen the format o
12640 66 20 61 20 70 61 67 65 20 72 65 63 6f 72 64 20  f a page record 
12650 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  is as follows:</
12660 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
12670 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c  Rollback Journal
12680 20 50 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72   Page Record For
12690 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
126a0 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
126b0 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
126c0 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
126d0 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
126e0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
126f0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
12700 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
12710 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12720 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70  >4.    <td>The p
12730 61 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  age number in th
12740 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
12750 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12760 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12770 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
12780 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12790 72 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67  r>N.    <td>Orig
127a0 69 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20  inal content of 
127b0 74 68 65 20 70 61 67 65 20 70 72 69 6f 72 20 74  the page prior t
127c0 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  o the start of t
127d0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 3c  he transaction.<
127e0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
127f0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e  p align=center>N
12800 2b 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  +4.    <td valig
12810 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12820 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65  er>4.    <td>Che
12830 63 6b 73 75 6d 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  cksum.</table>.<
12840 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e 28  /center>...<p>^(
12850 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20  The checksum is 
12860 61 6e 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62  an unsigned 32-b
12870 69 74 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 75  it integer compu
12880 74 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c  ted as follows:<
12890 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e  /p>..<ol>.<li>In
128a0 69 74 69 61 6c 69 7a 65 20 74 68 65 20 63 68 65  itialize the che
128b0 63 6b 73 75 6d 20 74 6f 20 74 68 65 20 63 68 65  cksum to the che
128c0 63 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c 75  cksum nonce valu
128d0 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 6a  e found in the.j
128e0 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 61 74  ournal header at
128f0 20 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69 3e   offset 12..<li>
12900 49 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64 65 78  Initialize index
12910 20 58 20 74 6f 20 62 65 20 4e 2d 32 30 30 20 28   X to be N-200 (
12920 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 73  where N is the s
12930 69 7a 65 20 6f 66 20 61 20 64 61 74 61 62 61 73  ize of a databas
12940 65 20 70 61 67 65 0a 69 6e 20 62 79 74 65 73 2e  e page.in bytes.
12950 0a 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74 20 74  .<li>Interpret t
12960 68 65 20 66 6f 75 72 20 62 79 74 65 73 20 61 74  he four bytes at
12970 20 6f 66 66 73 65 74 20 58 20 69 6e 74 6f 20 74   offset X into t
12980 68 65 20 70 61 67 65 20 61 73 20 61 20 34 2d 62  he page as a 4-b
12990 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 0a 75  yte big-endian.u
129a0 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e  nsigned integer.
129b0 20 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20    Add the value 
129c0 6f 66 20 74 68 61 74 20 69 6e 74 65 67 65 72 20  of that integer 
129d0 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d 2e  to the checksum.
129e0 0a 3c 6c 69 3e 53 75 62 74 72 61 63 65 20 32 30  .<li>Subtrace 20
129f0 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49 66  0 from X..<li>If
12a00 20 58 20 69 73 20 67 72 65 61 74 65 72 20 74 68   X is greater th
12a10 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a  an or equal to z
12a20 65 72 6f 2c 20 67 6f 20 62 61 63 6b 20 74 6f 20  ero, go back to 
12a30 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e 0a  step 3..</ol>)^.
12a40 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d  .<p>The checksum
12a50 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 74   value is used t
12a60 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20  o guard against 
12a70 69 6e 63 6f 6d 70 6c 65 74 65 20 77 72 69 74 65  incomplete write
12a80 73 20 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c 20 70  s of.a journal p
12a90 61 67 65 20 72 65 63 6f 72 64 20 66 6f 6c 6c 6f  age record follo
12aa0 77 69 6e 67 20 61 20 70 6f 77 65 72 20 66 61 69  wing a power fai
12ab0 6c 75 72 65 2e 20 20 41 20 64 69 66 66 65 72 65  lure.  A differe
12ac0 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 0a  nt random nonce.
12ad0 69 73 20 75 73 65 64 20 65 61 63 68 20 74 69 6d  is used each tim
12ae0 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  e a transaction 
12af0 69 73 20 73 74 61 72 74 65 64 20 69 6e 20 6f 72  is started in or
12b00 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20  der to minimize 
12b10 74 68 65 20 72 69 73 6b 0a 74 68 61 74 20 75 6e  the risk.that un
12b20 77 72 69 74 74 65 6e 20 73 65 63 74 6f 72 73 20  written sectors 
12b30 6d 69 67 68 74 20 62 79 20 63 68 61 6e 63 65 20  might by chance 
12b40 63 6f 6e 74 61 69 6e 20 64 61 74 61 20 66 72 6f  contain data fro
12b50 6d 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 0a  m the same page.
12b60 74 68 61 74 20 77 61 73 20 61 20 70 61 72 74 20  that was a part 
12b70 6f 66 20 70 72 69 6f 72 20 6a 6f 75 72 6e 61 6c  of prior journal
12b80 73 2e 20 20 42 79 20 63 68 61 6e 67 69 6e 67 20  s.  By changing 
12b90 74 68 65 20 6e 6f 6e 63 65 20 66 6f 72 20 65 61  the nonce for ea
12ba0 63 68 0a 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ch.transaction, 
12bb0 73 74 61 6c 65 20 64 61 74 61 20 6f 6e 20 64 69  stale data on di
12bc0 73 6b 20 77 69 6c 6c 20 73 74 69 6c 6c 20 67 65  sk will still ge
12bd0 6e 65 72 61 74 65 20 61 6e 20 69 6e 63 6f 72 72  nerate an incorr
12be0 65 63 74 20 63 68 65 63 6b 73 75 6d 0a 61 6e 64  ect checksum.and
12bf0 20 62 65 20 64 65 74 65 63 74 65 64 20 77 69 74   be detected wit
12c00 68 20 68 69 67 68 20 70 72 6f 62 61 62 69 6c 69  h high probabili
12c10 74 79 2e 20 20 54 68 65 20 63 68 65 63 6b 73 75  ty.  The checksu
12c20 6d 20 6f 6e 6c 79 20 75 73 65 73 20 61 20 73 70  m only uses a sp
12c30 61 72 73 65 20 73 61 6d 70 6c 65 0a 6f 66 20 33  arse sample.of 3
12c40 32 2d 62 69 74 20 77 6f 72 64 73 20 66 72 6f 6d  2-bit words from
12c50 20 74 68 65 20 64 61 74 61 20 72 65 63 6f 72 64   the data record
12c60 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65   for performance
12c70 20 72 65 61 73 6f 6e 73 20 2d 20 64 65 73 69 67   reasons - desig
12c80 6e 20 73 74 75 64 69 65 73 20 0a 64 75 72 69 6e  n studies .durin
12c90 67 20 74 68 65 20 70 6c 61 6e 6e 69 6e 67 20 70  g the planning p
12ca0 68 61 73 65 73 20 6f 66 20 53 51 4c 69 74 65 20  hases of SQLite 
12cb0 33 2e 30 2e 30 20 73 68 6f 77 65 64 0a 61 20 73  3.0.0 showed.a s
12cc0 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f  ignificant perfo
12cd0 72 6d 61 6e 63 65 20 68 69 74 20 69 6e 20 63 68  rmance hit in ch
12ce0 65 63 6b 73 75 6d 6d 69 6e 67 20 74 68 65 20 65  ecksumming the e
12cf0 6e 74 69 72 65 20 70 61 67 65 2e 3c 2f 70 3e 0a  ntire page.</p>.
12d00 0a 3c 70 3e 4c 65 74 20 74 68 65 20 70 61 67 65  .<p>Let the page
12d10 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 61 74 20   count value at 
12d20 6f 66 66 73 65 74 20 38 20 69 6e 20 74 68 65 20  offset 8 in the 
12d30 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 62  journal header b
12d40 65 20 4d 2e 0a 5e 49 66 20 4d 20 69 73 20 67 72  e M..^If M is gr
12d50 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20  eater than zero 
12d60 74 68 65 6e 20 61 66 74 65 72 20 4d 20 70 61 67  then after M pag
12d70 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 6a 6f  e records the jo
12d80 75 72 6e 61 6c 20 66 69 6c 65 0a 6d 61 79 20 62  urnal file.may b
12d90 65 20 7a 65 72 6f 20 70 61 64 64 65 64 20 6f 75  e zero padded ou
12da0 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6d 75  t to the next mu
12db0 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20 73 65  ltiple of the se
12dc0 63 74 6f 72 20 73 69 7a 65 20 61 6e 64 20 61 6e  ctor size and an
12dd0 6f 74 68 65 72 0a 6a 6f 75 72 6e 61 6c 20 68 65  other.journal he
12de0 61 64 65 72 20 6d 61 79 20 62 65 20 69 6e 73 65  ader may be inse
12df0 72 74 65 64 2e 20 20 5e 41 6c 6c 20 6a 6f 75 72  rted.  ^All jour
12e00 6e 61 6c 20 68 65 61 64 65 72 73 20 77 69 74 68  nal headers with
12e10 69 6e 20 74 68 65 20 73 61 6d 65 0a 6a 6f 75 72  in the same.jour
12e20 6e 61 6c 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e  nal must contain
12e30 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
12e40 73 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e 64  se page size and
12e50 20 73 65 63 74 6f 72 20 73 69 7a 65 2e 3c 2f 70   sector size.</p
12e60 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69 73 20 2d  >..<p>^If M is -
12e70 31 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c  1 in the initial
12e80 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 2c   journal header,
12e90 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
12ea0 20 6f 66 20 70 61 67 65 20 72 65 63 6f 72 64 73   of page records
12eb0 0a 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 73 20  .that follow is 
12ec0 63 6f 6d 70 75 74 65 64 20 62 79 20 63 6f 6d 70  computed by comp
12ed0 75 74 69 6e 67 20 68 6f 77 20 6d 61 6e 79 20 70  uting how many p
12ee0 61 67 65 20 72 65 63 6f 72 64 73 20 77 69 6c 6c  age records will
12ef0 20 66 69 74 20 69 6e 0a 74 68 65 20 61 76 61 69   fit in.the avai
12f00 6c 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20 74  lable space of t
12f10 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20  he remainder of 
12f20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
12f30 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
12f40 72 61 67 6d 65 6e 74 20 77 61 6c 66 6f 72 6d 61  ragment walforma
12f50 74 20 7b 57 41 4c 20 66 6f 72 6d 61 74 7d 3c 2f  t {WAL format}</
12f60 74 63 6c 3e 0a 3c 68 32 3e 34 2e 30 20 54 68 65  tcl>.<h2>4.0 The
12f70 20 57 72 69 74 65 2d 41 68 65 61 64 20 4c 6f 67   Write-Ahead Log
12f80 3c 2f 68 32 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e  </h2>..<p>Beginn
12f90 69 6e 67 20 77 69 74 68 20 5b 76 65 72 73 69 6f  ing with [versio
12fa0 6e 20 33 2e 37 2e 30 5d 2c 20 53 51 4c 69 74 65  n 3.7.0], SQLite
12fb0 20 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20   supports a new 
12fc0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74  transaction.cont
12fd0 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61  rol mechanism ca
12fe0 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69  lled "[WAL | wri
12ff0 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f  te-ahead log]" o
13000 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e  r "[WAL]"..^When
13010 20 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69   a database is i
13020 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20  n WAL mode, all 
13030 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74  connections to t
13040 68 61 74 20 64 61 74 61 62 61 73 65 20 6d 75 73  hat database mus
13050 74 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20  t.use the WAL.  
13060 5e 41 20 70 61 72 74 69 63 75 6c 61 72 20 64 61  ^A particular da
13070 74 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20  tabase will use 
13080 65 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63  either a rollbac
13090 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57  k journal.or a W
130a0 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  AL, but not both
130b0 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
130c0 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61  e..^The WAL is a
130d0 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e  lways located in
130e0 20 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74   the same direct
130f0 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62  ory as the datab
13100 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73  ase.file and has
13110 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
13120 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
13130 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65  ile but with the
13140 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61   string."<tt>-wa
13150 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64  l</tt>" appended
13160 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 31 20 57  .</p>..<h3>4.1 W
13170 41 4c 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f  AL File Format</
13180 68 33 3e 0a 0a 3c 70 3e 41 20 57 41 4c 20 66 69  h3>..<p>A WAL fi
13190 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  le consists of a
131a0 20 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64   header followed
131b0 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
131c0 20 22 66 72 61 6d 65 73 22 2e 0a 45 61 63 68 20   "frames"..Each 
131d0 66 72 61 6d 65 20 72 65 63 6f 72 64 73 20 74 68  frame records th
131e0 65 20 72 65 76 69 73 65 64 20 63 6f 6e 74 65 6e  e revised conten
131f0 74 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61  t of a single pa
13200 67 65 20 66 72 6f 6d 20 74 68 65 0a 64 61 74 61  ge from the.data
13210 62 61 73 65 20 66 69 6c 65 2e 20 20 41 6c 6c 20  base file.  All 
13220 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
13230 61 74 61 62 61 73 65 20 61 72 65 20 72 65 63 6f  atabase are reco
13240 72 64 65 64 20 62 79 20 77 72 69 74 69 6e 67 0a  rded by writing.
13250 66 72 61 6d 65 73 20 69 6e 74 6f 20 74 68 65 20  frames into the 
13260 57 41 4c 2e 20 20 54 72 61 6e 73 61 63 74 69 6f  WAL.  Transactio
13270 6e 73 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 61  ns commit when a
13280 20 66 72 61 6d 65 20 69 73 20 77 72 69 74 74 65   frame is writte
13290 6e 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20  n that.contains 
132a0 61 20 63 6f 6d 6d 69 74 20 6d 61 72 6b 65 72 2e  a commit marker.
132b0 20 20 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20    ^A single WAL 
132c0 63 61 6e 20 61 6e 64 20 75 73 75 61 6c 6c 79 20  can and usually 
132d0 64 6f 65 73 20 72 65 63 6f 72 64 20 0a 6d 75 6c  does record .mul
132e0 74 69 70 6c 65 20 74 72 61 6e 73 61 63 74 69 6f  tiple transactio
132f0 6e 73 2e 20 20 50 65 72 69 6f 64 69 63 61 6c 6c  ns.  Periodicall
13300 79 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  y, the content o
13310 66 20 74 68 65 20 57 41 4c 20 69 73 0a 74 72 61  f the WAL is.tra
13320 6e 73 66 65 72 72 65 64 20 62 61 63 6b 20 69 6e  nsferred back in
13330 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
13340 66 69 6c 65 20 69 6e 20 61 6e 20 6f 70 65 72 61  file in an opera
13350 74 69 6f 6e 20 63 61 6c 6c 65 64 20 61 0a 22 63  tion called a."c
13360 68 65 63 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a  heckpoint".</p>.
13370 0a 3c 70 3e 5e 41 20 73 69 6e 67 6c 65 20 57 41  .<p>^A single WA
13380 4c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 72 65  L file can be re
13390 75 73 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69  used multiple ti
133a0 6d 65 73 2e 20 20 5e 49 6e 20 6f 74 68 65 72 20  mes.  ^In other 
133b0 77 6f 72 64 73 2c 20 74 68 65 0a 57 41 4c 20 63  words, the.WAL c
133c0 61 6e 20 66 69 6c 6c 20 75 70 20 77 69 74 68 20  an fill up with 
133d0 66 72 61 6d 65 73 20 61 6e 64 20 74 68 65 6e 20  frames and then 
133e0 62 65 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  be checkpointed 
133f0 61 6e 64 20 74 68 65 6e 20 6e 65 77 0a 66 72 61  and then new.fra
13400 6d 65 73 20 63 61 6e 20 6f 76 65 72 77 72 69 74  mes can overwrit
13410 65 20 74 68 65 20 6f 6c 64 20 6f 6e 65 73 2e 20  e the old ones. 
13420 20 5e 41 20 57 41 4c 20 61 6c 77 61 79 73 20 67   ^A WAL always g
13430 72 6f 77 73 20 66 72 6f 6d 20 62 65 67 69 6e 6e  rows from beginn
13440 69 6e 67 0a 74 6f 77 61 72 64 20 74 68 65 20 65  ing.toward the e
13450 6e 64 2e 20 20 43 68 65 63 6b 73 75 6d 73 20 61  nd.  Checksums a
13460 6e 64 20 63 6f 75 6e 74 65 72 73 20 61 74 74 61  nd counters atta
13470 63 68 65 64 20 74 6f 20 65 61 63 68 20 66 72 61  ched to each fra
13480 6d 65 20 61 72 65 0a 75 73 65 64 20 74 6f 20 64  me are.used to d
13490 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 66  etermine which f
134a0 72 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 65  rames within the
134b0 20 57 41 4c 20 61 72 65 20 76 61 6c 69 64 20 61   WAL are valid a
134c0 6e 64 20 77 68 69 63 68 0a 61 72 65 20 6c 65 66  nd which.are lef
134d0 74 6f 76 65 72 73 20 66 72 6f 6d 20 70 72 69 6f  tovers from prio
134e0 72 20 63 68 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f  r checkpoints.</
134f0 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 57 41 4c  p>..<p>^(The WAL
13500 20 68 65 61 64 65 72 20 69 73 20 33 32 20 62 79   header is 32 by
13510 74 65 73 20 69 6e 20 73 69 7a 65 20 61 6e 64 20  tes in size and 
13520 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20  consists of the 
13530 66 6f 6c 6c 6f 77 69 6e 67 20 65 69 67 68 74 0a  following eight.
13540 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69  big-endian 32-bi
13550 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  t unsigned integ
13560 65 72 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a  er values:</p>..
13570 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20  <center>.<i>WAL 
13580 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69  Header Format</i
13590 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64  ><br>.<table wid
135a0 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d  th="80%" border=
135b0 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65  1>.<tr><th>Offse
135c0 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73  t<th>Size<th>Des
135d0 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64  cription.<tr><td
135e0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
135f0 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61  n=center>0<td va
13600 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13610 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13620 4d 61 67 69 63 20 6e 75 6d 62 65 72 2e 20 20 30  Magic number.  0
13630 78 33 37 37 66 30 36 38 32 20 6f 72 20 30 78 33  x377f0682 or 0x3
13640 37 37 66 30 36 38 33 0a 3c 74 72 3e 3c 74 64 20  77f0683.<tr><td 
13650 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13660 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c  =center>4<td val
13670 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13680 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46  nter>4.    <td>F
13690 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ile format versi
136a0 6f 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 20 33  on.  Currently 3
136b0 30 30 37 30 30 30 2e 0a 3c 74 72 3e 3c 74 64 20  007000..<tr><td 
136c0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
136d0 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c  =center>8<td val
136e0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
136f0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 44  nter>4.    <td>D
13700 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
13710 65 2e 20 20 45 78 61 6d 70 6c 65 3a 20 31 30 32  e.  Example: 102
13720 34 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  4.<tr><td valign
13730 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13740 72 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>12<td valign=t
13750 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13760 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 70  4.    <td>Checkp
13770 6f 69 6e 74 20 73 65 71 75 65 6e 63 65 20 6e 75  oint sequence nu
13780 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  mber.<tr><td val
13790 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
137a0 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67  nter>16<td valig
137b0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
137c0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c  er>4.    <td>Sal
137d0 74 2d 31 3a 20 72 61 6e 64 6f 6d 20 69 6e 74 65  t-1: random inte
137e0 67 65 72 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  ger incremented 
137f0 77 69 74 68 20 65 61 63 68 20 63 68 65 63 6b 70  with each checkp
13800 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  oint.<tr><td val
13810 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13820 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67  nter>20<td valig
13830 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13840 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c  er>4.    <td>Sal
13850 74 2d 32 3a 20 61 20 64 69 66 66 65 72 65 6e 74  t-2: a different
13860 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 66   random number f
13870 6f 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69  or each checkpoi
13880 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  nt.<tr><td valig
13890 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
138a0 65 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d  er>24<td valign=
138b0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
138c0 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
138d0 73 75 6d 2d 31 3a 20 46 69 72 73 74 20 70 61 72  sum-1: First par
138e0 74 20 6f 66 20 61 20 63 68 65 63 6b 73 75 6d 20  t of a checksum 
138f0 6f 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20  on the first 24 
13900 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a  bytes of header.
13910 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13920 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13930 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  28<td valign=top
13940 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13950 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
13960 2d 32 3a 20 53 65 63 6f 6e 64 20 70 61 72 74 20  -2: Second part 
13970 6f 66 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20  of the checksum 
13980 6f 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20  on the first 24 
13990 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a  bytes of header.
139a0 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
139b0 72 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69  r>)^..<p>^Immedi
139c0 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20  ately following 
139d0 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72 20 61  the wal-header a
139e0 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  re zero or more 
139f0 66 72 61 6d 65 73 2e 20 5e 45 61 63 68 0a 66 72  frames. ^Each.fr
13a00 61 6d 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ame consists of 
13a10 61 20 32 34 2d 62 79 74 65 20 66 72 61 6d 65 2d  a 24-byte frame-
13a20 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20  header followed 
13a30 62 79 20 61 20 3c 69 3e 70 61 67 65 2d 73 69 7a  by a <i>page-siz
13a40 65 3c 2f 69 3e 20 62 79 74 65 73 0a 6f 66 20 70  e</i> bytes.of p
13a50 61 67 65 20 64 61 74 61 2e 20 5e 28 54 68 65 20  age data. ^(The 
13a60 66 72 61 6d 65 2d 68 65 61 64 65 72 20 69 73 20  frame-header is 
13a70 73 69 78 20 62 69 67 2d 65 6e 64 69 61 6e 20 33  six big-endian 3
13a80 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 0a  2-bit unsigned .
13a90 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2c 20  integer values, 
13aa0 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65  as follows:..<ce
13ab0 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 46 72 61  nter>.<i>WAL Fra
13ac0 6d 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  me Header Format
13ad0 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
13ae0 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
13af0 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  er=1>.<tr><th>Of
13b00 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
13b10 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
13b20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13b30 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
13b40 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13b50 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
13b60 74 64 3e 50 61 67 65 20 6e 75 6d 62 65 72 0a 3c  td>Page number.<
13b70 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13b80 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13b90 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13ba0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13bb0 20 20 3c 74 64 3e 46 6f 72 20 63 6f 6d 6d 69 74    <td>For commit
13bc0 20 72 65 63 6f 72 64 73 2c 20 74 68 65 20 73 69   records, the si
13bd0 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
13be0 73 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73  se file in pages
13bf0 0a 20 20 20 20 20 20 20 20 61 66 74 65 72 20 74  .        after t
13c00 68 65 20 63 6f 6d 6d 69 74 2e 20 20 46 6f 72 20  he commit.  For 
13c10 61 6c 6c 20 6f 74 68 65 72 20 72 65 63 6f 72 64  all other record
13c20 73 2c 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64  s, zero..<tr><td
13c30 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13c40 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61  n=center>8<td va
13c50 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13c60 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13c70 53 61 6c 74 2d 31 20 63 6f 70 69 65 64 20 66 72  Salt-1 copied fr
13c80 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  om the WAL heade
13c90 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
13ca0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13cb0 72 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>12<td valign=t
13cc0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13cd0 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32  4.    <td>Salt-2
13ce0 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
13cf0 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e   WAL header.<tr>
13d00 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13d10 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74  lign=center>16<t
13d20 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13d30 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
13d40 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20  <td>Checksum-1: 
13d50 20 43 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63   Cumulative chec
13d60 6b 73 75 6d 20 75 70 20 74 68 72 6f 75 67 68 20  ksum up through 
13d70 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  and including th
13d80 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20  is page.<tr><td 
13d90 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13da0 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61  =center>20<td va
13db0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13dc0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13dd0 43 68 65 63 6b 73 75 6d 2d 32 3a 20 20 53 65 63  Checksum-2:  Sec
13de0 6f 6e 64 20 68 61 6c 66 20 6f 66 20 74 68 65 20  ond half of the 
13df0 63 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b  cumulative check
13e00 73 75 6d 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  sum..</table>.</
13e10 63 65 6e 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e  center>)^..^(<p>
13e20 41 20 66 72 61 6d 65 20 69 73 20 63 6f 6e 73 69  A frame is consi
13e30 64 65 72 65 64 20 76 61 6c 69 64 20 69 66 20 61  dered valid if a
13e40 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66  nd only if the f
13e50 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69  ollowing conditi
13e60 6f 6e 73 20 61 72 65 0a 74 72 75 65 3a 3c 2f 70  ons are.true:</p
13e70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54  >..<ol>.<li><p>T
13e80 68 65 20 73 61 6c 74 2d 31 20 61 6e 64 20 73 61  he salt-1 and sa
13e90 6c 74 2d 32 20 76 61 6c 75 65 73 20 69 6e 20 74  lt-2 values in t
13ea0 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20  he frame-header 
13eb0 6d 61 74 63 68 0a 20 20 20 20 20 20 20 73 61 6c  match.       sal
13ec0 74 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  t values in the 
13ed0 77 61 6c 2d 68 65 61 64 65 72 3c 2f 70 3e 3c 2f  wal-header</p></
13ee0 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  li>..<li><p>The 
13ef0 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20  checksum values 
13f00 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 38 20 62  in the final 8 b
13f10 79 74 65 73 20 6f 66 20 74 68 65 20 66 72 61 6d  ytes of the fram
13f20 65 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20 20  e-header.       
13f30 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68  exactly match th
13f40 65 20 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70 75  e checksum compu
13f50 74 65 64 20 63 6f 6e 73 65 63 75 74 69 76 65 6c  ted consecutivel
13f60 79 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20  y on the.       
13f70 66 69 72 73 74 20 32 34 20 62 79 74 65 73 20 6f  first 24 bytes o
13f80 66 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  f the WAL header
13f90 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 38   and the first 8
13fa0 20 62 79 74 65 73 20 61 6e 64 0a 20 20 20 20 20   bytes and.     
13fb0 20 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66    the content of
13fc0 20 61 6c 6c 20 66 72 61 6d 65 73 0a 20 20 20 20   all frames.    
13fd0 20 20 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63     up to and inc
13fe0 6c 75 64 69 6e 67 20 74 68 65 20 63 75 72 72 65  luding the curre
13ff0 6e 74 20 66 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c  nt frame.</p></l
14000 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a  i></li>.</ol>)^.
14010 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
14020 74 20 77 61 6c 63 6b 73 6d 20 7b 57 41 4c 20 63  t walcksm {WAL c
14030 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68  hecksum algorith
14040 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 32  m}</tcl>.<h3>4.2
14050 20 43 68 65 63 6b 73 75 6d 20 41 6c 67 6f 72 69   Checksum Algori
14060 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  thm</h3>..<p>The
14070 20 63 68 65 63 6b 73 75 6d 20 69 73 20 63 6f 6d   checksum is com
14080 70 75 74 65 64 20 62 79 20 69 6e 74 65 72 70 72  puted by interpr
14090 65 74 69 6e 67 20 74 68 65 20 69 6e 70 75 74 20  eting the input 
140a0 61 73 0a 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65  as.an even numbe
140b0 72 20 6f 66 20 75 6e 73 69 67 6e 65 64 20 33 32  r of unsigned 32
140c0 2d 62 69 74 20 69 6e 74 65 67 65 72 73 3a 20 78  -bit integers: x
140d0 28 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29  (0) through x(N)
140e0 2e 0a 5e 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ..^The 32-bit in
140f0 74 65 67 65 72 73 20 61 72 65 20 62 69 67 2d 65  tegers are big-e
14100 6e 64 69 61 6e 20 69 66 20 74 68 65 0a 6d 61 67  ndian if the.mag
14110 69 63 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  ic number in the
14120 20 66 69 72 73 74 20 34 20 62 79 74 65 73 20 6f   first 4 bytes o
14130 66 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  f the WAL header
14140 20 69 73 20 30 78 33 37 37 66 30 36 38 33 20 61   is 0x377f0683 a
14150 6e 64 0a 74 68 65 20 69 6e 74 65 67 65 72 73 20  nd.the integers 
14160 61 72 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61  are little-endia
14170 6e 20 69 66 20 74 68 65 20 6d 61 67 69 63 20 6e  n if the magic n
14180 75 6d 62 65 72 20 69 73 20 30 78 33 37 37 66 30  umber is 0x377f0
14190 36 38 32 2e 0a 5e 54 68 65 20 63 68 65 63 6b 73  682..^The checks
141a0 75 6d 20 76 61 6c 75 65 73 20 61 72 65 20 61 6c  um values are al
141b0 77 61 79 73 20 73 74 6f 72 65 64 20 69 6e 20 74  ways stored in t
141c0 68 65 20 66 72 61 6d 65 20 68 65 61 64 65 72 20  he frame header 
141d0 69 6e 20 61 0a 62 69 67 2d 65 6e 64 69 61 6e 20  in a.big-endian 
141e0 66 6f 72 6d 61 74 20 72 65 67 61 72 64 6c 65 73  format regardles
141f0 73 20 6f 66 20 77 68 69 63 68 20 62 79 74 65 20  s of which byte 
14200 6f 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f  order is used to
14210 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 63 68 65   compute.the che
14220 63 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  cksum.</p>..<p>T
14230 68 65 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f  he checksum algo
14240 72 69 74 68 6d 20 6f 6e 6c 79 20 77 6f 72 6b 73  rithm only works
14250 20 66 6f 72 20 63 6f 6e 74 65 6e 74 20 77 68 69   for content whi
14260 63 68 20 69 73 20 61 20 6d 75 6c 74 69 70 6c 65  ch is a multiple
14270 20 6f 66 0a 38 20 62 79 74 65 73 20 69 6e 20 6c   of.8 bytes in l
14280 65 6e 67 74 68 2e 20 20 49 6e 20 6f 74 68 65 72  ength.  In other
14290 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 69   words, if the i
142a0 6e 70 75 74 73 20 61 72 65 20 78 28 30 29 20 74  nputs are x(0) t
142b0 68 72 6f 75 67 68 20 78 28 4e 29 0a 74 68 65 6e  hrough x(N).then
142c0 20 4e 20 6d 75 73 74 20 62 65 20 6f 64 64 2e 0a   N must be odd..
142d0 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61  ^(The checksum a
142e0 6c 67 6f 72 69 74 68 6d 20 69 73 20 61 73 20 66  lgorithm is as f
142f0 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
14300 75 6f 74 65 3e 3c 70 72 65 3e 20 0a 73 30 20 3d  uote><pre> .s0 =
14310 20 73 31 20 3d 20 30 0a 66 6f 72 20 69 20 66 72   s1 = 0.for i fr
14320 6f 6d 20 30 20 74 6f 20 6e 2d 31 20 73 74 65 70  om 0 to n-1 step
14330 20 32 3a 0a 20 20 20 73 30 20 2b 3d 20 78 28 69   2:.   s0 += x(i
14340 29 20 2b 20 73 31 3b 0a 20 20 20 73 31 20 2b 3d  ) + s1;.   s1 +=
14350 20 78 28 69 2b 31 29 20 2b 20 73 30 3b 0a 65 6e   x(i+1) + s0;.en
14360 64 66 6f 72 0a 23 20 72 65 73 75 6c 74 20 69 6e  dfor.# result in
14370 20 73 30 20 61 6e 64 20 73 31 0a 3c 2f 70 72 65   s0 and s1.</pre
14380 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
14390 0a 0a 3c 70 3e 5e 54 68 65 20 6f 75 74 70 75 74  ..<p>^The output
143a0 73 20 73 30 20 61 6e 64 20 73 31 20 61 72 65 20  s s0 and s1 are 
143b0 62 6f 74 68 20 77 65 69 67 68 74 65 64 20 63 68  both weighted ch
143c0 65 63 6b 73 75 6d 73 20 75 73 69 6e 67 20 46 69  ecksums using Fi
143d0 62 6f 6e 61 63 63 69 20 77 65 69 67 68 74 73 0a  bonacci weights.
143e0 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
143f0 2e 20 20 28 5e 54 68 65 20 6c 61 72 67 65 73 74  .  (^The largest
14400 20 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68   Fibonacci weigh
14410 74 20 6f 63 63 75 72 73 20 6f 6e 20 74 68 65 20  t occurs on the 
14420 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 0a 6f 66  first element.of
14430 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 62 65   the sequence be
14440 69 6e 67 20 73 75 6d 6d 65 64 2e 29 20 20 5e 54  ing summed.)  ^T
14450 68 65 20 73 31 20 76 61 6c 75 65 20 73 70 61 6e  he s1 value span
14460 73 20 61 6c 6c 20 33 32 2d 62 69 74 20 69 6e 74  s all 32-bit int
14470 65 67 65 72 0a 74 65 72 6d 73 20 6f 66 20 74 68  eger.terms of th
14480 65 20 73 65 71 75 65 6e 63 65 20 77 68 65 72 65  e sequence where
14490 61 73 20 73 30 20 6f 6d 69 74 73 20 74 68 65 20  as s0 omits the 
144a0 66 69 6e 61 6c 20 74 65 72 6d 2e 3c 2f 70 3e 0a  final term.</p>.
144b0 0a 3c 68 33 3e 34 2e 33 20 43 68 65 63 6b 70 6f  .<h3>4.3 Checkpo
144c0 69 6e 74 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68  int Algorithm</h
144d0 33 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61 20 5b 63 68  3>..<p>^On a [ch
144e0 65 63 6b 70 6f 69 6e 74 5d 2c 20 74 68 65 20 57  eckpoint], the W
144f0 41 4c 20 69 73 20 66 69 72 73 74 20 66 6c 75 73  AL is first flus
14500 68 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e  hed to persisten
14510 74 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 0a  t storage using.
14520 74 68 65 20 78 53 79 6e 63 20 6d 65 74 68 6f 64  the xSync method
14530 20 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33   of the [sqlite3
14540 5f 69 6f 5f 6d 65 74 68 6f 64 73 20 7c 20 56 46  _io_methods | VF
14550 53 5d 2e 20 0a 5e 54 68 65 6e 20 76 61 6c 69 64  S]. .^Then valid
14560 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
14570 57 41 4c 20 69 73 20 74 72 61 6e 73 66 65 72 72  WAL is transferr
14580 65 64 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ed into the data
14590 62 61 73 65 20 66 69 6c 65 2e 0a 5e 46 69 6e 61  base file..^Fina
145a0 6c 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61 73  lly, the databas
145b0 65 20 69 73 20 66 6c 75 73 68 65 64 20 74 6f 20  e is flushed to 
145c0 70 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61  persistent stora
145d0 67 65 20 75 73 69 6e 67 20 61 6e 6f 74 68 65 72  ge using another
145e0 0a 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 63 61  .xSync method ca
145f0 6c 6c 2e 0a 54 68 65 20 78 53 79 6e 63 20 6f 70  ll..The xSync op
14600 65 72 61 74 69 6f 6e 73 20 73 65 72 76 65 20 61  erations serve a
14610 73 20 77 72 69 74 65 20 62 61 72 72 69 65 72 73  s write barriers
14620 20 2d 20 61 6c 6c 20 77 72 69 74 65 73 20 6c 61   - all writes la
14630 75 6e 63 68 65 64 0a 62 65 66 6f 72 65 20 74 68  unched.before th
14640 65 20 78 53 79 6e 63 20 6d 75 73 74 20 63 6f 6d  e xSync must com
14650 70 6c 65 74 65 20 62 65 66 6f 72 65 20 61 6e 79  plete before any
14660 20 77 72 69 74 65 20 74 68 61 74 20 6c 61 75 6e   write that laun
14670 63 68 65 73 20 61 66 74 65 72 20 74 68 65 0a 78  ches after the.x
14680 53 79 6e 63 20 62 65 67 69 6e 73 2e 3c 2f 70 3e  Sync begins.</p>
14690 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 61 20 63 68  ..<p>^After a ch
146a0 65 63 6b 70 6f 69 6e 74 2c 20 6e 65 77 20 77 72  eckpoint, new wr
146b0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ite transactions
146c0 20 6f 76 65 72 77 72 69 74 65 0a 74 68 65 20 57   overwrite.the W
146d0 41 4c 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65  AL file from the
146e0 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 5e 41 74   beginning.  ^At
146f0 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
14700 65 20 66 69 72 73 74 20 6e 65 77 0a 77 72 69 74  e first new.writ
14710 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  e transaction, t
14720 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 73 61  he WAL header sa
14730 6c 74 2d 31 20 76 61 6c 75 65 20 69 73 20 69 6e  lt-1 value is in
14740 63 72 65 6d 65 6e 74 65 64 0a 61 6e 64 20 74 68  cremented.and th
14750 65 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 20 69  e salt-2 value i
14760 73 20 72 61 6e 64 6f 6d 69 7a 65 64 2e 20 20 54  s randomized.  T
14770 68 65 73 65 20 63 68 61 6e 67 65 73 20 74 6f 20  hese changes to 
14780 74 68 65 20 73 61 6c 74 73 20 69 6e 76 61 6c 69  the salts invali
14790 64 61 74 65 0a 6f 6c 64 20 66 72 61 6d 65 73 20  date.old frames 
147a0 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
147b0 68 61 76 65 20 61 6c 72 65 61 64 79 20 62 65 65  have already bee
147c0 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 62  n checkpointed b
147d0 75 74 20 6e 6f 74 20 79 65 74 0a 6f 76 65 72 77  ut not yet.overw
147e0 72 69 74 74 65 6e 2c 20 61 6e 64 20 70 72 65 76  ritten, and prev
147f0 65 6e 74 20 74 68 65 6d 20 66 72 6f 6d 20 62 65  ent them from be
14800 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74 65 64  ing checkpointed
14810 20 61 67 61 69 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63   again.</p>..<tc
14820 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
14830 6c 72 65 61 64 20 7b 57 41 4c 20 72 65 61 64 20  lread {WAL read 
14840 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e  algorithm}</tcl>
14850 0a 3c 68 33 3e 34 2e 34 20 52 65 61 64 65 72 20  .<h3>4.4 Reader 
14860 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a  Algorithm</h3>..
14870 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20 61 20 70  <p>^(To read a p
14880 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  age from the dat
14890 61 62 61 73 65 20 28 63 61 6c 6c 20 69 74 20 70  abase (call it p
148a0 61 67 65 20 6e 75 6d 62 65 72 20 50 29 2c 20 61  age number P), a
148b0 20 72 65 61 64 65 72 0a 66 69 72 73 74 20 63 68   reader.first ch
148c0 65 63 6b 73 20 74 68 65 20 57 41 4c 20 74 6f 20  ecks the WAL to 
148d0 73 65 65 20 69 66 20 69 74 20 63 6f 6e 74 61 69  see if it contai
148e0 6e 73 20 70 61 67 65 20 50 2e 20 20 49 66 20 73  ns page P.  If s
148f0 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61 73 74  o, then the.last
14900 20 76 61 6c 69 64 20 69 6e 73 74 61 6e 63 65 20   valid instance 
14910 6f 66 20 70 61 67 65 20 50 20 74 68 61 74 20 69  of page P that i
14920 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  s followed by a 
14930 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f 72 20  commit frame.or 
14940 69 73 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d  is a commit fram
14950 65 20 69 74 73 65 6c 66 20 62 65 63 6f 6d 65 73  e itself becomes
14960 20 74 68 65 20 76 61 6c 75 65 20 72 65 61 64 2e   the value read.
14970 29 5e 20 20 5e 49 66 20 74 68 65 20 57 41 4c 0a  )^  ^If the WAL.
14980 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f 70 69  contains no copi
14990 65 73 20 6f 66 20 70 61 67 65 20 50 20 74 68 61  es of page P tha
149a0 74 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20  t are valid and 
149b0 77 68 69 63 68 20 61 72 65 20 61 20 63 6f 6d 6d  which are a comm
149c0 69 74 0a 66 72 61 6d 65 20 6f 72 20 61 72 65 20  it.frame or are 
149d0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
149e0 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74 68 65 6e  mmit frame, then
149f0 20 70 61 67 65 20 50 20 69 73 20 72 65 61 64 20   page P is read 
14a00 66 72 6f 6d 0a 74 68 65 20 64 61 74 61 62 61 73  from.the databas
14a10 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
14a20 54 6f 20 73 74 61 72 74 20 61 20 72 65 61 64 20  To start a read 
14a30 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
14a40 20 72 65 61 64 65 72 20 72 65 63 6f 72 64 73 20   reader records 
14a50 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
14a60 20 6c 61 73 74 0a 76 61 6c 69 64 20 66 72 61 6d   last.valid fram
14a70 65 20 69 6e 20 74 68 65 20 57 41 4c 2e 20 20 54  e in the WAL.  T
14a80 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20 74  he reader uses t
14a90 68 69 73 20 72 65 63 6f 72 64 65 64 20 22 6d 78  his recorded "mx
14aa0 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 66 6f 72  Frame" value.for
14ab0 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
14ac0 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e  read operations.
14ad0 20 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69 6f    New transactio
14ae0 6e 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e 64  ns can be append
14af0 65 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20 62  ed.to the WAL, b
14b00 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68  ut as long as th
14b10 65 20 72 65 61 64 65 72 20 75 73 65 73 20 69 74  e reader uses it
14b20 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72 61  s original mxFra
14b30 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e  me value.and ign
14b40 6f 72 65 73 20 73 75 62 73 65 71 75 65 6e 74 6c  ores subsequentl
14b50 79 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74 65  y appended conte
14b60 6e 74 2c 20 74 68 65 20 72 65 61 64 65 72 20 77  nt, the reader w
14b70 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73 69  ill see a .consi
14b80 73 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f  stent snapshot o
14b90 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
14ba0 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f 69  rom a single poi
14bb0 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54  nt in time.  .^T
14bc0 68 69 73 20 74 65 63 68 6e 69 71 75 65 20 61 6c  his technique al
14bd0 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f  lows multiple co
14be0 6e 63 75 72 72 65 6e 74 20 72 65 61 64 65 72 73  ncurrent readers
14bf0 20 74 6f 20 76 69 65 77 20 64 69 66 66 65 72 65   to view differe
14c00 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20  nt .versions of 
14c10 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
14c20 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75  tent simultaneou
14c30 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sly.</p>..<p>The
14c40 20 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74 68   reader algorith
14c50 6d 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  m in the previou
14c60 73 20 70 61 72 61 67 72 61 70 68 73 20 77 6f 72  s paragraphs wor
14c70 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62 75  ks correctly, bu
14c80 74 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d 65  t .because frame
14c90 73 20 66 6f 72 20 70 61 67 65 20 50 20 63 61 6e  s for page P can
14ca0 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65   appear anywhere
14cb0 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 2c   within the WAL,
14cc0 20 74 68 65 0a 72 65 61 64 65 72 20 68 61 73 20   the.reader has 
14cd0 74 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74 69  to scan the enti
14ce0 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66  re WAL looking f
14cf0 6f 72 20 70 61 67 65 20 50 20 66 72 61 6d 65 73  or page P frames
14d00 2e 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69 73  .  If the.WAL is
14d10 20 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c 65   large (multiple
14d20 20 6d 65 67 61 62 79 74 65 73 20 69 73 20 74 79   megabytes is ty
14d30 70 69 63 61 6c 29 20 74 68 61 74 20 73 63 61 6e  pical) that scan
14d40 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e   can be slow,.an
14d50 64 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61 6e  d read performan
14d60 63 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54 6f  ce suffers.  ^To
14d70 20 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20 70   overcome this p
14d80 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72 61  roblem, a separa
14d90 74 65 0a 64 61 74 61 20 73 74 72 75 63 74 75 72  te.data structur
14da0 65 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61 6c  e called the wal
14db0 2d 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74 61  -index is mainta
14dc0 69 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74 65  ined to expedite
14dd0 20 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72 20   the.search for 
14de0 66 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72 74  frames of a part
14df0 69 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e  icular page.</p>
14e00 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
14e10 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61  nt walindexforma
14e20 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20 7b 57  t {wal-index} {W
14e30 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61 74 7d  AL-index format}
14e40 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 35 20 57  </tcl>.<h3>4.5 W
14e50 41 4c 2d 49 6e 64 65 78 20 46 6f 72 6d 61 74 3c  AL-Index Format<
14e60 2f 68 33 3e 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74  /h3>..<p>Concept
14e70 75 61 6c 6c 79 2c 20 74 68 65 20 77 61 6c 2d 69  ually, the wal-i
14e80 6e 64 65 78 20 69 73 20 73 68 61 72 65 64 20 6d  ndex is shared m
14e90 65 6d 6f 72 79 2c 20 74 68 6f 75 67 68 20 74 68  emory, though th
14ea0 65 20 63 75 72 72 65 6e 74 0a 56 46 53 20 69 6d  e current.VFS im
14eb0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73  plementations us
14ec0 65 20 61 20 6d 6d 61 70 70 65 64 20 66 69 6c 65  e a mmapped file
14ed0 20 66 6f 72 20 74 68 65 20 77 61 6c 2d 69 6e 64   for the wal-ind
14ee0 65 78 2e 20 20 5e 54 68 65 20 6d 6d 61 70 70 65  ex.  ^The mmappe
14ef0 64 0a 66 69 6c 65 20 69 73 20 69 6e 20 74 68 65  d.file is in the
14f00 20 73 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20   same directory 
14f10 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
14f20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65  and has the same
14f30 20 6e 61 6d 65 0a 61 73 20 74 68 65 20 64 61 74   name.as the dat
14f40 61 62 61 73 65 20 77 69 74 68 20 61 20 22 3c 74  abase with a "<t
14f50 74 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20 73 75 66  t>-shm</tt>" suf
14f60 66 69 78 20 61 70 70 65 6e 64 65 64 2e 20 20 42  fix appended.  B
14f70 65 63 61 75 73 65 0a 74 68 65 20 77 61 6c 2d 69  ecause.the wal-i
14f80 6e 64 65 78 20 69 73 20 73 68 61 72 65 64 20 6d  ndex is shared m
14f90 65 6d 6f 72 79 2c 20 53 51 4c 69 74 65 20 64 6f  emory, SQLite do
14fa0 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 0a  es not support .
14fb0 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  [PRAGMA journal_
14fc0 6d 6f 64 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d  mode | journal_m
14fd0 6f 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e  ode=WAL] .on a n
14fe0 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65  etwork filesyste
14ff0 6d 20 77 68 65 6e 20 63 6c 69 65 6e 74 73 20 61  m when clients a
15000 72 65 20 6f 6e 20 64 69 66 66 65 72 65 6e 74 20  re on different 
15010 6d 61 63 68 69 6e 65 73 2e 0a 41 6c 6c 20 75 73  machines..All us
15020 65 72 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ers of the datab
15030 61 73 65 20 6d 75 73 74 20 62 65 20 61 62 6c 65  ase must be able
15040 20 74 6f 20 73 68 61 72 65 20 74 68 65 20 73 61   to share the sa
15050 6d 65 20 6d 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a  me memory.</p>..
15060 3c 70 3e 54 68 65 20 70 75 72 70 6f 73 65 20 6f  <p>The purpose o
15070 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  f the wal-index 
15080 69 73 20 74 6f 20 61 6e 73 77 65 72 20 74 68 69  is to answer thi
15090 73 20 71 75 65 73 74 69 6f 6e 20 71 75 69 63 6b  s question quick
150a0 6c 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ly:</p>..<blockq
150b0 75 6f 74 65 3e 3c 69 3e 0a 47 69 76 65 6e 20 61  uote><i>.Given a
150c0 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50 20 61   page number P a
150d0 6e 64 20 61 20 6d 61 78 69 6d 75 6d 20 57 41 4c  nd a maximum WAL
150e0 20 66 72 61 6d 65 20 69 6e 64 65 78 20 4d 2c 0a   frame index M,.
150f0 72 65 74 75 72 6e 20 74 68 65 20 6c 61 72 67 65  return the large
15100 73 74 20 57 41 4c 20 66 72 61 6d 65 20 69 6e 64  st WAL frame ind
15110 65 78 20 66 6f 72 20 70 61 67 65 20 50 20 74 68  ex for page P th
15120 61 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 63 65  at does not exce
15130 65 64 20 4d 2c 20 0a 6f 72 20 72 65 74 75 72 6e  ed M, .or return
15140 20 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 20 61   NULL if there a
15150 72 65 20 6e 6f 20 66 72 61 6d 65 73 20 66 6f 72  re no frames for
15160 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f 20   page P that do 
15170 6e 6f 74 20 65 78 63 65 65 64 20 4d 2e 0a 3c 2f  not exceed M..</
15180 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  i></blockquote>.
15190 0a 3c 70 3e 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e  .<p>The <i>M</i>
151a0 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 70 72   value in the pr
151b0 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68  evious paragraph
151c0 20 69 73 20 74 68 65 20 22 6d 78 46 72 61 6d 65   is the "mxFrame
151d0 22 20 76 61 6c 75 65 0a 64 65 66 69 6e 65 64 20  " value.defined 
151e0 69 6e 20 5b 57 41 4c 20 72 65 61 64 20 61 6c 67  in [WAL read alg
151f0 6f 72 69 74 68 6d 20 7c 20 73 65 63 74 69 6f 6e  orithm | section
15200 20 34 2e 34 5d 20 74 68 61 74 20 69 73 20 72 65   4.4] that is re
15210 61 64 20 61 74 20 74 68 65 20 73 74 61 72 74 20  ad at the start 
15220 0a 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f  .of a transactio
15230 6e 20 61 6e 64 20 77 68 69 63 68 20 64 65 66 69  n and which defi
15240 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  nes the maximum 
15250 66 72 61 6d 65 20 66 72 6f 6d 20 74 68 65 20 57  frame from the W
15260 41 4c 20 74 68 61 74 20 0a 74 68 65 20 72 65 61  AL that .the rea
15270 64 65 72 20 77 69 6c 6c 20 75 73 65 2e 3c 2f 70  der will use.</p
15280 3e 0a 0a 3c 70 3e 54 68 65 20 77 61 6c 2d 69 6e  >..<p>The wal-in
15290 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74  dex is transient
152a0 2e 20 20 41 66 74 65 72 20 61 20 63 72 61 73 68  .  After a crash
152b0 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  , the wal-index 
152c0 69 73 0a 72 65 63 6f 6e 73 74 72 75 63 74 65 64  is.reconstructed
152d0 20 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69 6e   from the origin
152e0 61 6c 20 57 41 4c 20 66 69 6c 65 2e 20 20 5e 54  al WAL file.  ^T
152f0 68 65 20 56 46 53 20 69 73 20 72 65 71 75 69 72  he VFS is requir
15300 65 64 0a 74 6f 20 65 69 74 68 65 72 20 74 72 75  ed.to either tru
15310 6e 63 61 74 65 20 6f 72 20 7a 65 72 6f 20 74 68  ncate or zero th
15320 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20  e header of the 
15330 77 61 6c 2d 69 6e 64 65 78 20 77 68 65 6e 20 74  wal-index when t
15340 68 65 20 6c 61 73 74 0a 63 6f 6e 6e 65 63 74 69  he last.connecti
15350 6f 6e 20 74 6f 20 69 74 20 63 6c 6f 73 65 73 2e  on to it closes.
15360 20 20 42 65 63 61 75 73 65 20 74 68 65 20 77 61    Because the wa
15370 6c 2d 69 6e 64 65 78 20 69 73 20 74 72 61 6e 73  l-index is trans
15380 69 65 6e 74 2c 20 69 74 20 63 61 6e 0a 75 73 65  ient, it can.use
15390 20 61 6e 20 61 72 63 68 69 74 65 63 74 75 72 65   an architecture
153a0 2d 73 70 65 63 69 66 69 63 20 66 6f 72 6d 61 74  -specific format
153b0 3b 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 68 61  ; it does not ha
153c0 76 65 20 74 6f 20 62 65 20 63 72 6f 73 73 2d 70  ve to be cross-p
153d0 6c 61 74 66 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20  latform..Hence, 
153e0 75 6e 6c 69 6b 65 20 74 68 65 20 64 61 74 61 62  unlike the datab
153f0 61 73 65 20 61 6e 64 20 57 41 4c 20 66 69 6c 65  ase and WAL file
15400 20 66 6f 72 6d 61 74 73 20 77 68 69 63 68 20 73   formats which s
15410 74 6f 72 65 20 61 6c 6c 20 76 61 6c 75 65 73 0a  tore all values.
15420 61 73 20 62 69 67 20 65 6e 64 69 61 6e 2c 20 74  as big endian, t
15430 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 73 74 6f  he wal-index sto
15440 72 65 73 20 6d 75 6c 74 69 2d 62 79 74 65 20 76  res multi-byte v
15450 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6e 61 74  alues in the nat
15460 69 76 65 0a 62 79 74 65 20 6f 72 64 65 72 20 6f  ive.byte order o
15470 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75  f the host compu
15480 74 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69  ter.</p>..<p>Thi
15490 73 20 64 6f 63 75 6d 65 6e 74 20 69 73 20 63 6f  s document is co
154a0 6e 63 65 72 6e 65 64 20 77 69 74 68 20 74 68 65  ncerned with the
154b0 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61 74   persistent stat
154c0 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
154d0 65 0a 66 69 6c 65 2c 20 61 6e 64 20 73 69 6e 63  e.file, and sinc
154e0 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  e the wal-index 
154f0 69 73 20 61 20 74 72 61 6e 73 69 65 6e 74 20 73  is a transient s
15500 74 72 75 63 74 75 72 65 2c 20 6e 6f 20 66 75 72  tructure, no fur
15510 74 68 65 72 20 0a 69 6e 66 6f 72 6d 61 74 69 6f  ther .informatio
15520 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
15530 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e  at of the wal-in
15540 64 65 78 20 77 69 6c 6c 20 62 65 20 70 72 6f 76  dex will be prov
15550 69 64 65 64 20 68 65 72 65 2e 0a 43 6f 6d 70 6c  ided here..Compl
15560 65 74 65 20 64 65 74 61 69 6c 73 20 6f 6e 20 74  ete details on t
15570 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
15580 20 77 61 6c 2d 69 6e 64 65 78 20 61 72 65 20 63   wal-index are c
15590 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 0a  ontained within.
155a0 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 53 51 4c 69  comments in SQLi
155b0 74 65 20 73 6f 75 72 63 65 20 63 6f 64 65 2e 3c  te source code.<
155c0 2f 70 3e 0a                                      /p>.