Documentation Source Text

Hex Artifact Content
Login

Artifact a333c01e9bf38a772e57a4fec906f7491c6e976f:


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 6f 6e 65 20  .  There is one 
6070: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 69 6e  table b-trees in
6080: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6090: 6c 65 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 69  le.for each rowi
60a0: 64 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  d table in the d
60b0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
60c0: 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d  including system
60d0: 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20   tables.such as 
60e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20  sqlite_master.  
60f0: 54 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 64  There is one ind
6100: 65 78 20 62 2d 74 72 65 65 0a 69 6e 20 74 68 65  ex b-tree.in the
6110: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
6120: 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20 69 6e  or each index in
6130: 20 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63   the schema, inc
6140: 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69  luding implied i
6150: 6e 64 65 78 65 73 0a 63 72 65 61 74 65 64 20 62  ndexes.created b
6160: 79 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  y uniqueness con
6170: 73 74 72 61 69 6e 74 73 2e 20 20 54 68 65 72 65  straints.  There
6180: 20 61 72 65 20 6e 6f 20 62 2d 74 72 65 65 73 20   are no b-trees 
6190: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
61a0: 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d  [virtual tables]
61b0: 2e 20 20 53 70 65 63 69 66 69 63 20 76 69 72 74  .  Specific virt
61c0: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
61d0: 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20  entations might 
61e0: 6d 61 6b 65 20 75 73 65 0a 6f 66 20 5b 73 68 61  make use.of [sha
61f0: 64 6f 77 20 74 61 62 6c 65 73 5d 20 66 6f 72 20  dow tables] for 
6200: 73 74 6f 72 61 67 65 2c 20 62 75 74 20 74 68 6f  storage, but tho
6210: 73 65 20 73 68 61 64 6f 77 20 74 61 62 6c 65 73  se shadow tables
6220: 20 77 69 6c 6c 20 68 61 76 65 20 73 65 70 61 72   will have separ
6230: 61 74 65 0a 65 6e 74 72 69 65 73 20 69 6e 20 74  ate.entries in t
6240: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
6250: 6d 61 2e 20 20 5b 57 49 54 48 4f 55 54 20 52 4f  ma.  [WITHOUT RO
6260: 57 49 44 5d 20 74 61 62 6c 65 73 20 75 73 65 20  WID] tables use 
6270: 69 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 72 61  index b-trees.ra
6280: 74 68 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c  ther than a tabl
6290: 65 20 62 2d 74 72 65 65 73 2c 20 73 6f 20 74 68  e b-trees, so th
62a0: 65 72 65 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78  ere is one.index
62b0: 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64   b-tree in the d
62c0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
62d0: 20 65 61 63 68 20 5b 57 49 54 48 4f 55 54 20 52   each [WITHOUT R
62e0: 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65  OWID] table..The
62f0: 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f   b-tree correspo
6300: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 73 71 6c  nding to the sql
6310: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
6320: 20 69 73 20 61 6c 77 61 79 73 20 61 20 74 61 62   is always a tab
6330: 6c 65 0a 62 2d 74 72 65 65 20 61 6e 64 20 61 6c  le.b-tree and al
6340: 77 61 79 73 20 68 61 73 20 61 20 72 6f 6f 74 20  ways has a root 
6350: 70 61 67 65 20 6f 66 20 31 2e 0a 54 68 65 20 73  page of 1..The s
6360: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
6370: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  le contains the 
6380: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
6390: 20 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72   for every other
63a0: 20 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65   .table and inde
63b0: 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  x in the databas
63c0: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
63d0: 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20  Each entry in a 
63e0: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e  table b-tree con
63f0: 73 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69  sists of a 64-bi
6400: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
6410: 20 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32   key.and up to 2
6420: 31 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20  147483647 bytes 
6430: 6f 66 20 61 72 62 69 74 72 61 72 79 20 64 61 74  of arbitrary dat
6440: 61 2e 20 20 28 54 68 65 20 6b 65 79 20 6f 66 20  a.  (The key of 
6450: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 0a 63  a table b-tree.c
6460: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
6470: 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65  e [rowid] of the
6480: 20 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20   SQL table that 
6490: 74 68 65 20 62 2d 74 72 65 65 20 69 6d 70 6c 65  the b-tree imple
64a0: 6d 65 6e 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72  ments.).Interior
64b0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68   table b-trees h
64c0: 6f 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e  old only keys an
64d0: 64 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68  d pointers to ch
64e0: 69 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61  ildren..All data
64f0: 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e   is contained in
6500: 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65   the table b-tre
6510: 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c  e leaves.</p>..<
6520: 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20  p>Each entry in 
6530: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
6540: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
6550: 72 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20  rbitrary key of 
6560: 75 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37  up.to 2147483647
6570: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
6580: 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70   and no data.</p
6590: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
65a0: 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64  ent cell_payload
65b0: 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c   {cell payload}<
65c0: 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20  /tcl>.<p>Define 
65d0: 74 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66  the "payload" of
65e0: 20 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68   a cell to be th
65f0: 65 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67  e arbitrary leng
6600: 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68  th section.of th
6610: 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20  e cell.  For an 
6620: 69 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68  index b-tree, th
6630: 65 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20  e key is always 
6640: 61 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e  arbitrary in len
6650: 67 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68  gth.and hence th
6660: 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65  e payload is the
6670: 20 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72 65   key.  There are
6680: 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65   no arbitrary le
6690: 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e  ngth elements.in
66a0: 20 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e   the cells of in
66b0: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
66c0: 72 65 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f  ree pages and so
66d0: 20 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76   those cells hav
66e0: 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54  e no.payload.  T
66f0: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66  able b-tree leaf
6700: 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61   pages contain a
6710: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
6720: 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66  content and.so f
6730: 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73  or cells on thos
6740: 65 20 70 61 67 65 73 20 74 68 65 20 70 61 79 6c  e pages the payl
6750: 6f 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65  oad is the conte
6760: 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20  nt..<p>When the 
6770: 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20  size of payload 
6780: 66 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65  for a cell excee
6790: 64 73 20 61 20 63 65 72 74 61 69 6e 20 74 68 72  ds a certain thr
67a0: 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65  eshold (to.be de
67b0: 66 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65  fined later) the
67c0: 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74  n only the first
67d0: 20 66 65 77 20 62 79 74 65 73 20 6f 66 20 74 68   few bytes of th
67e0: 65 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74  e payload.are st
67f0: 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72  ored on the b-tr
6800: 65 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20  ee page and the 
6810: 62 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65  balance is store
6820: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
6830: 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76  st.of content ov
6840: 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70  erflow pages.</p
6850: 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70  >..<p>A b-tree p
6860: 61 67 65 20 69 73 20 64 69 76 69 64 65 64 20 69  age is divided i
6870: 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74  nto regions in t
6880: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64  he following ord
6890: 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68  er:..<ol>.<li>Th
68a0: 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62  e 100-byte datab
68b0: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
68c0: 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31  (found on page 1
68d0: 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38   only).<li>The 8
68e0: 20 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74 72   or 12 byte b-tr
68f0: 65 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c  ee page header.<
6900: 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e  li>The cell poin
6910: 74 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e  ter array.<li>Un
6920: 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a  allocated space.
6930: 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e  <li>The cell con
6940: 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68  tent area.<li>Th
6950: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
6960: 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c  n..</ol>.</p>..<
6970: 70 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64  p>The 100-byte d
6980: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
6990: 64 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c  der is found onl
69a0: 79 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69  y on page 1, whi
69b0: 63 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74  ch is.always a t
69c0: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
69d0: 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74  .  All other b-t
69e0: 72 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65  ree pages in the
69f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f   database file.o
6a00: 6d 69 74 20 74 68 69 73 20 31 30 30 2d 62 79 74  mit this 100-byt
6a10: 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  e header.</p>..<
6a20: 70 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72  p>The reserved r
6a30: 65 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61  egion is an area
6a40: 20 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63 65   of unused space
6a50: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65   at the end of e
6a60: 76 65 72 79 0a 70 61 67 65 20 28 65 78 63 65 70  very.page (excep
6a70: 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61  t the locking pa
6a80: 67 65 29 20 74 68 61 74 20 65 78 74 65 6e 73 69  ge) that extensi
6a90: 6f 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68  ons can use to h
6aa0: 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66  old per-page.inf
6ab0: 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20  ormation.  ^The 
6ac0: 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65  size of the rese
6ad0: 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64  rved region is d
6ae0: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
6af0: 20 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e   one-byte.unsign
6b00: 65 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64  ed integer found
6b10: 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66   at an offset of
6b20: 20 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74   20 into the dat
6b30: 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65  abase file heade
6b40: 72 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74  r..The size of t
6b50: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
6b60: 6f 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65  on is usually ze
6b70: 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ro.</p>..<p>The 
6b80: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
6b90: 65 72 20 69 73 20 38 20 62 79 74 65 73 20 69 6e  er is 8 bytes in
6ba0: 20 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70   size for leaf p
6bb0: 61 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65  ages and 12.byte
6bc0: 73 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70  s for interior p
6bd0: 61 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69  ages.  All multi
6be0: 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74  byte values in t
6bf0: 68 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 61  he page header.a
6c00: 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54  re big-endian..T
6c10: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  he b-tree page h
6c20: 65 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65  eader is compose
6c30: 64 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d of the followi
6c40: 6e 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a  ng fields:</p>..
6c50: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72  <center>.<i>B-tr
6c60: 65 65 20 50 61 67 65 20 48 65 61 64 65 72 20 46  ee Page Header F
6c70: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
6c80: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69  able border=1 wi
6c90: 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c  dth="80%">.<tr><
6ca0: 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a  th>Offset<th>Siz
6cb0: 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e  e<th>Description
6cc0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
6cd0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6ce0: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >0<td align=cent
6cf0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c  er valign=top>1<
6d00: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
6d10: 54 68 65 20 6f 6e 65 2d 62 79 74 65 20 66 6c 61  The one-byte fla
6d20: 67 20 61 74 20 6f 66 66 73 65 74 20 30 20 69 6e  g at offset 0 in
6d30: 64 69 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74  dicating the b-t
6d40: 72 65 65 20 70 61 67 65 20 74 79 70 65 2e 0a 5e  ree page type..^
6d50: 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65 61  A value of 2 mea
6d60: 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61  ns the page is a
6d70: 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e 64 65 78  n interior index
6d80: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41   b-tree page..^A
6d90: 20 76 61 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e   value of 5 mean
6da0: 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e  s the page is an
6db0: 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20   interior table 
6dc0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20  b-tree page..^A 
6dd0: 76 61 6c 75 65 20 6f 66 20 31 30 20 6d 65 61 6e  value of 10 mean
6de0: 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61 20  s the page is a 
6df0: 6c 65 61 66 20 69 6e 64 65 78 20 62 2d 74 72 65  leaf index b-tre
6e00: 65 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65  e page..^A value
6e10: 20 6f 66 20 31 33 20 6d 65 61 6e 73 20 74 68 65   of 13 means the
6e20: 20 70 61 67 65 20 69 73 20 61 20 6c 65 61 66 20   page is a leaf 
6e30: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67  table b-tree pag
6e40: 65 2e 0a 5e 41 6e 79 20 6f 74 68 65 72 20 76 61  e..^Any other va
6e50: 6c 75 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72  lue for the b-tr
6e60: 65 65 20 70 61 67 65 20 74 79 70 65 20 69 73 20  ee page type is 
6e70: 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74  an error..<tr><t
6e80: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6e90: 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61  align=top>1<td a
6ea0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6eb0: 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67  gn=top>2<td alig
6ec0: 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f  n=left>.^The two
6ed0: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
6ee0: 20 6f 66 66 73 65 74 20 31 20 67 69 76 65 73 20   offset 1 gives 
6ef0: 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
6f00: 0a 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b  .first freeblock
6f10: 20 6f 6e 20 74 68 65 20 70 61 67 65 2c 20 6f 72   on the page, or
6f20: 20 69 73 20 7a 65 72 6f 20 69 66 20 74 68 65 72   is zero if ther
6f30: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
6f40: 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  cks..<tr><td ali
6f50: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6f60: 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67 6e 3d  =top>3<td align=
6f70: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6f80: 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>2<td align=lef
6f90: 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62 79 74 65  t>.^The two-byte
6fa0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
6fb0: 65 74 20 33 20 67 69 76 65 73 20 74 68 65 20 6e  et 3 gives the n
6fc0: 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f  umber of cells o
6fd0: 6e 20 74 68 65 20 70 61 67 65 2e 0a 3c 74 72 3e  n the page..<tr>
6fe0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6ff0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64   valign=top>5<td
7000: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7010: 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c  lign=top>2<td al
7020: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68 65 20  ign=left>.^(The 
7030: 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72  two-byte integer
7040: 20 61 74 20 6f 66 66 73 65 74 20 35 20 64 65 73   at offset 5 des
7050: 69 67 6e 61 74 65 73 20 74 68 65 20 73 74 61 72  ignates the star
7060: 74 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 63 6f  t of the cell co
7070: 6e 74 65 6e 74 0a 61 72 65 61 2e 20 20 41 20 7a  ntent.area.  A z
7080: 65 72 6f 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ero value for th
7090: 69 73 20 69 6e 74 65 67 65 72 20 69 73 20 69 6e  is integer is in
70a0: 74 65 72 70 72 65 74 65 64 20 61 73 20 36 35 35  terpreted as 655
70b0: 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 61 6c  36.)^.<tr><td al
70c0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
70d0: 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e  n=top>7<td align
70e0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
70f0: 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  op>1<td align=le
7100: 66 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74  ft>.^The one-byt
7110: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
7120: 73 65 74 20 37 20 67 69 76 65 73 20 74 68 65 20  set 7 gives the 
7130: 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65  number of fragme
7140: 6e 74 65 64 20 66 72 65 65 0a 62 79 74 65 73 20  nted free.bytes 
7150: 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20  within the cell 
7160: 63 6f 6e 74 65 6e 74 20 61 72 65 61 2e 0a 3c 74  content area..<t
7170: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
7180: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c  er valign=top>8<
7190: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
71a0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20  valign=top>4<td 
71b0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68  align=left>.^(Th
71c0: 65 20 66 6f 75 72 2d 62 79 74 65 20 70 61 67 65  e four-byte page
71d0: 20 6e 75 6d 62 65 72 20 61 74 20 6f 66 66 73 65   number at offse
71e0: 74 20 38 20 69 73 20 74 68 65 20 72 69 67 68 74  t 8 is the right
71f0: 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 2e 20 20  -most pointer.  
7200: 54 68 69 73 0a 76 61 6c 75 65 20 61 70 70 65 61  This.value appea
7210: 72 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  rs in the header
7220: 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 62 2d 74   of interior b-t
7230: 72 65 65 20 70 61 67 65 73 20 6f 6e 6c 79 20 61  ree pages only a
7240: 6e 64 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  nd is omitted fr
7250: 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 70 61 67  om.all other pag
7260: 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f  es.)^.</table></
7270: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f 63 65 6e  blockquote></cen
7280: 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 65  ter>..<p>^The ce
7290: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
72a0: 20 6f 66 20 61 20 62 2d 74 72 65 65 20 70 61 67   of a b-tree pag
72b0: 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
72c0: 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74 72 65 65  llows the b-tree
72d0: 0a 70 61 67 65 20 68 65 61 64 65 72 2e 20 20 4c  .page header.  L
72e0: 65 74 20 4b 20 62 65 20 74 68 65 20 6e 75 6d 62  et K be the numb
72f0: 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74  er of cells on t
7300: 68 65 20 62 74 72 65 65 2e 20 20 5e 54 68 65 20  he btree.  ^The 
7310: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72  cell pointer.arr
7320: 61 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b  ay consists of K
7330: 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   2-byte integer 
7340: 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65 20 63  offsets to the c
7350: 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20 20 5e  ell contents.  ^
7360: 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The.cell pointer
7370: 73 20 61 72 65 20 61 72 72 61 6e 67 65 64 20 69  s are arranged i
7380: 6e 20 6b 65 79 20 6f 72 64 65 72 20 77 69 74 68  n key order with
7390: 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20   left-most cell 
73a0: 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74  (the cell with t
73b0: 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29  he.smallest key)
73c0: 20 66 69 72 73 74 20 61 6e 64 20 74 68 65 20 72   first and the r
73d0: 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28  ight-most cell (
73e0: 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68  the cell with th
73f0: 65 20 6c 61 72 67 65 73 74 0a 6b 65 79 29 20 6c  e largest.key) l
7400: 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c  ast.</p>..<p>Cel
7410: 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f  l content is sto
7420: 72 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 20  red in the cell 
7430: 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f  content region o
7440: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7450: 65 2e 0a 53 51 4c 69 74 65 20 73 74 72 69 76 65  e..SQLite strive
7460: 73 20 74 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73  s to place cells
7470: 20 61 73 20 66 61 72 20 74 6f 77 61 72 64 20 74   as far toward t
7480: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 2d  he end of the b-
7490: 74 72 65 65 20 70 61 67 65 20 61 73 0a 69 74 20  tree page as.it 
74a0: 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  can, in order to
74b0: 20 6c 65 61 76 65 20 73 70 61 63 65 20 66 6f 72   leave space for
74c0: 20 66 75 74 75 72 65 20 67 72 6f 77 74 68 20 6f   future growth o
74d0: 66 20 74 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  f the cell point
74e0: 65 72 20 61 72 72 61 79 2e 0a 54 68 65 20 61 72  er array..The ar
74f0: 65 61 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  ea in between th
7500: 65 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e  e last cell poin
7510: 74 65 72 20 61 72 72 61 79 20 65 6e 74 72 79 20  ter array entry 
7520: 61 6e 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  and the beginnin
7530: 67 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 63  g of.the first c
7540: 65 6c 6c 20 69 73 20 74 68 65 20 75 6e 61 6c 6c  ell is the unall
7550: 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c  ocated region..<
7560: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 70 61  /p>..<p>^If a pa
7570: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63  ge contains no c
7580: 65 6c 6c 73 20 28 77 68 69 63 68 20 69 73 20 6f  ells (which is o
7590: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  nly possible for
75a0: 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 6f 66 20   a root page.of 
75b0: 61 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  a table that con
75c0: 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73 29 20 74  tains no rows) t
75d0: 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 74  hen the offset t
75e0: 6f 20 74 68 65 0a 63 65 6c 6c 20 63 6f 6e 74 65  o the.cell conte
75f0: 6e 74 20 61 72 65 61 20 77 69 6c 6c 20 65 71 75  nt area will equ
7600: 61 6c 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  al the page size
7610: 20 6d 69 6e 75 73 20 74 68 65 20 62 79 74 65 73   minus the bytes
7620: 20 6f 66 20 72 65 73 65 72 76 65 64 20 73 70 61   of reserved spa
7630: 63 65 2e 0a 5e 28 49 66 20 74 68 65 20 64 61 74  ce..^(If the dat
7640: 61 62 61 73 65 20 75 73 65 73 20 61 20 36 35 35  abase uses a 655
7650: 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a  36-byte page siz
7660: 65 20 61 6e 64 20 74 68 65 20 72 65 73 65 72 76  e and the reserv
7670: 65 64 20 73 70 61 63 65 20 69 73 20 7a 65 72 6f  ed space is zero
7680: 0a 28 74 68 65 20 75 73 75 61 6c 20 76 61 6c 75  .(the usual valu
7690: 65 20 66 6f 72 20 72 65 73 65 72 76 65 64 20 73  e for reserved s
76a0: 70 61 63 65 29 20 74 68 65 6e 20 74 68 65 20 63  pace) then the c
76b0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 66 73  ell content offs
76c0: 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79 20 70  et of an.empty p
76d0: 61 67 65 20 77 61 6e 74 73 20 74 6f 20 62 65 20  age wants to be 
76e0: 36 35 35 33 36 2e 20 20 0a 48 6f 77 65 76 65 72  65536.  .However
76f0: 2c 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 69  , that integer i
7700: 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62  s too large to b
7710: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 32 2d  e stored in a.2-
7720: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
7730: 74 65 67 65 72 2c 20 73 6f 20 61 20 76 61 6c 75  teger, so a valu
7740: 65 20 6f 66 20 30 20 69 73 20 75 73 65 64 20 69  e of 0 is used i
7750: 6e 20 69 74 73 20 70 6c 61 63 65 2e 29 5e 0a 0a  n its place.)^..
7760: 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 69  <p>A freeblock i
7770: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 75 73  s a structure us
7780: 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 75  ed to identify u
7790: 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65  nallocated space
77a0: 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72 65 65   within.a b-tree
77b0: 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c 6f 63   page.  Freebloc
77c0: 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a 65 64  ks are organized
77d0: 20 61 73 20 61 20 63 68 61 69 6e 2e 20 20 5e 54   as a chain.  ^T
77e0: 68 65 20 66 69 72 73 74 20 32 20 62 79 74 65 73  he first 2 bytes
77f0: 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b 20   of.a freeblock 
7800: 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e  are a big-endian
7810: 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
7820: 73 20 74 68 65 20 6f 66 66 73 65 74 20 69 6e 20  s the offset in 
7830: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 0a  the b-tree page.
7840: 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65  of the next free
7850: 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63 68 61  block in the cha
7860: 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  in, or zero if t
7870: 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20  he freeblock is 
7880: 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65 20  the last on.the 
7890: 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 74 68 69  chain.  ^The thi
78a0: 72 64 20 61 6e 64 20 66 6f 75 72 74 68 20 62 79  rd and fourth by
78b0: 74 65 73 20 6f 66 20 65 61 63 68 20 66 72 65 65  tes of each free
78c0: 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69 67  block form.a big
78d0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
78e0: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a  which is the siz
78f0: 65 20 6f 66 20 74 68 65 20 66 72 65 65 62 6c 6f  e of the freeblo
7900: 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69 6e 63  ck in bytes, inc
7910: 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62 79 74  luding.the 4-byt
7920: 65 20 68 65 61 64 65 72 2e 20 20 5e 46 72 65 65  e header.  ^Free
7930: 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77 61 79  blocks are alway
7940: 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20 6f  s connected in o
7950: 72 64 65 72 20 0a 6f 66 20 69 6e 63 72 65 61 73  rder .of increas
7960: 69 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e 54 68  ing offset.  ^Th
7970: 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64 20 6f  e second field o
7980: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7990: 65 20 68 65 61 64 65 72 20 69 73 20 74 68 65 0a  e header is the.
79a0: 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20 66 69  offset of the fi
79b0: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20 6f  rst freeblock, o
79c0: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20  r zero if there 
79d0: 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b  are no freeblock
79e0: 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20 20  s on the.page.  
79f0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
7a00: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 74  d b-tree page, t
7a10: 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  here will always
7a20: 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65   be at least one
7a30: 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68 65   cell.before the
7a40: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
7a50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65  .</p>..<p>A free
7a60: 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73 20 61  block requires a
7a70: 74 20 6c 65 61 73 74 20 34 20 62 79 74 65 73 20  t least 4 bytes 
7a80: 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20 74 68  of space.  If th
7a90: 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c 61 74  ere is an isolat
7aa0: 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20 32  ed.group of 1, 2
7ab0: 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20 62 79  , or 3 unused by
7ac0: 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63  tes within the c
7ad0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
7ae0: 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a 63 6f  , those bytes.co
7af0: 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d 65 6e  mprise a fragmen
7b00: 74 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c 20 6e  t.  ^The total n
7b10: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
7b20: 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20  n all fragments 
7b30: 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74 68 65  is stored.in the
7b40: 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f 66 20   fifth field of 
7b50: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
7b60: 68 65 61 64 65 72 2e 20 20 5e 49 6e 20 61 20 77  header.  ^In a w
7b70: 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65  ell-formed b-tre
7b80: 65 20 70 61 67 65 2c 0a 74 68 65 20 74 6f 74 61  e page,.the tota
7b90: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
7ba0: 73 20 69 6e 20 66 72 61 67 6d 65 6e 74 73 20 6d  s in fragments m
7bb0: 61 79 20 6e 6f 74 20 65 78 63 65 65 64 20 36 30  ay not exceed 60
7bc0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f  .</p>..<p>The to
7bd0: 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66 72  tal amount of fr
7be0: 65 65 20 73 70 61 63 65 20 6f 6e 20 61 20 62 2d  ee space on a b-
7bf0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 73 69 73  tree page consis
7c00: 74 73 20 6f 66 20 74 68 65 20 73 69 7a 65 0a 6f  ts of the size.o
7c10: 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65  f the unallocate
7c20: 64 20 72 65 67 69 6f 6e 20 70 6c 75 73 20 74 68  d region plus th
7c30: 65 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20  e total size of 
7c40: 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20 70  all freeblocks p
7c50: 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f  lus the.number o
7c60: 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65  f fragmented fre
7c70: 65 20 62 79 74 65 73 2e 20 20 5e 53 51 4c 69 74  e bytes.  ^SQLit
7c80: 65 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65 20  e may from time 
7c90: 74 6f 20 74 69 6d 65 20 72 65 6f 72 67 61 6e 69  to time reorgani
7ca0: 7a 65 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65  ze.a b-tree page
7cb0: 20 73 6f 20 74 68 61 74 20 74 68 65 72 65 20 61   so that there a
7cc0: 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73  re no freeblocks
7cd0: 20 6f 72 20 66 72 61 67 6d 65 6e 74 20 62 79 74   or fragment byt
7ce0: 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20 62  es, all.unused b
7cf0: 79 74 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ytes are contain
7d00: 65 64 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c 6f  ed in the unallo
7d10: 63 61 74 65 64 20 73 70 61 63 65 20 72 65 67 69  cated space regi
7d20: 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c  on, and all.cell
7d30: 73 20 61 72 65 20 70 61 63 6b 65 64 20 74 69 67  s are packed tig
7d40: 68 74 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20  htly at the end 
7d50: 6f 66 20 74 68 65 20 70 61 67 65 2e 20 20 54 68  of the page.  Th
7d60: 69 73 20 69 73 20 63 61 6c 6c 65 64 20 0a 22 64  is is called ."d
7d70: 65 66 72 61 67 6d 65 6e 74 69 6e 67 22 20 74 68  efragmenting" th
7d80: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f  e b-tree page.</
7d90: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
7da0: 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b 76 61 72  ment varint {var
7db0: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
7dc0: 65 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f  eger} {varint}</
7dd0: 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69 61  tcl>..<p>A varia
7de0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
7df0: 65 72 20 6f 72 20 22 76 61 72 69 6e 74 22 20 69  er or "varint" i
7e00: 73 20 61 20 73 74 61 74 69 63 20 48 75 66 66 6d  s a static Huffm
7e10: 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20 36  an encoding.of 6
7e20: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
7e30: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73 20 74  ement integers t
7e40: 68 61 74 20 75 73 65 73 20 6c 65 73 73 20 73 70  hat uses less sp
7e50: 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70 6f  ace for small po
7e60: 73 69 74 69 76 65 20 0a 76 61 6c 75 65 73 2e 20  sitive .values. 
7e70: 0a 41 20 76 61 72 69 6e 74 20 69 73 20 62 65 74  .A varint is bet
7e80: 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74  ween 1 and 9 byt
7e90: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54  es in length.  T
7ea0: 68 65 20 76 61 72 69 6e 74 20 63 6f 6e 73 69 73  he varint consis
7eb0: 74 73 20 6f 66 20 65 69 74 68 65 72 0a 7a 65 72  ts of either.zer
7ec0: 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20  o or more bytes 
7ed0: 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20 68  which have the h
7ee0: 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 73 65  igh-order bit se
7ef0: 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
7f00: 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69 74 68  single byte.with
7f10: 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
7f20: 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69  bit clear, or ni
7f30: 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63 68 65  ne bytes, whiche
7f40: 76 65 72 20 69 73 20 73 68 6f 72 74 65 72 2e 0a  ver is shorter..
7f50: 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65 6e 20  The lower seven 
7f60: 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f 66 20  bits of each of 
7f70: 74 68 65 20 66 69 72 73 74 20 65 69 67 68 74 20  the first eight 
7f80: 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20 38 20  bytes and all 8 
7f90: 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74  bits of.the nint
7fa0: 68 20 62 79 74 65 20 61 72 65 20 75 73 65 64 20  h byte are used 
7fb0: 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20 74  to reconstruct t
7fc0: 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63  he 64-bit twos-c
7fd0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
7fe0: 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65 20 62  r..Varints are b
7ff0: 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74 73 20  ig-endian: bits 
8000: 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 65  taken from the e
8010: 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66 20 74  arlier byte of t
8020: 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20 74 68  he varint.are th
8030: 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69 63 61  e more significa
8040: 6e 74 20 74 68 61 6e 20 62 69 74 73 20 74 61 6b  nt than bits tak
8050: 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61 74 65  en from the late
8060: 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c  r bytes. </p>..<
8070: 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  p>The format of 
8080: 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73 20 6f  a cell depends o
8090: 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f 66 20  n which kind of 
80a0: 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 65 20  b-tree page the 
80b0: 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f 6e 2e  cell.appears on.
80c0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
80d0: 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20  table shows the 
80e0: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20 63 65  elements of a ce
80f0: 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f 66 20  ll, in.order of 
8100: 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f 72 20  appearance, for 
8110: 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d 74 72  the various b-tr
8120: 65 65 20 70 61 67 65 20 74 79 70 65 73 2e 3c 2f  ee page types.</
8130: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
8140: 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c  <dl>.<dt><p>Tabl
8150: 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65  e B-Tree Leaf Ce
8160: 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 64 29  ll (header 0x0d)
8170: 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  :</p></dt>.<dd><
8180: 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72  p><ul>.<li>A var
8190: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
81a0: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
81b0: 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61   bytes of payloa
81c0: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79  d, including any
81d0: 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20  .overflow.<li>A 
81e0: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
81f0: 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79 2c  the integer key,
8200: 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69 64 5d   a.k.a. "[rowid]
8210: 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  ".<li>The initia
8220: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
8230: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
8240: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
8250: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
8260: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
8270: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
8280: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
8290: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
82a0: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
82b0: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
82c0: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
82d0: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
82e0: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
82f0: 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
8300: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49  p>Table B-Tree I
8310: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20 28 68 65  nterior Cell (he
8320: 61 64 65 72 20 30 78 30 35 29 3a 3c 2f 70 3e 3c  ader 0x05):</p><
8330: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e  /dt>.<dd><p><ul>
8340: 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69  .<li>A 4-byte bi
8350: 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75  g-endian page nu
8360: 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74 68  mber which is th
8370: 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69  e left child poi
8380: 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69  nter..<li>A vari
8390: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
83a0: 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75 6c  integer key.</ul
83b0: 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  ></p></dd>..<dt>
83c0: 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20  <p>Index B-Tree 
83d0: 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61 64 65  Leaf Cell (heade
83e0: 72 20 30 78 30 61 29 3a 3c 2f 70 3e 3c 2f 64 74  r 0x0a):</p></dt
83f0: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
8400: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
8410: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
8420: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
8430: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
8440: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
8450: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
8460: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
8470: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
8480: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
8490: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
84a0: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
84b0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
84c0: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
84d0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
84e0: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
84f0: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
8500: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
8510: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
8520: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
8530: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
8540: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
8550: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20  e Interior Cell 
8560: 28 68 65 61 64 65 72 20 30 78 30 32 29 3a 3c 2f  (header 0x02):</
8570: 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c  p></dt>.<dd><p><
8580: 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65  ul>.<li>A 4-byte
8590: 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65   big-endian page
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 73   number of bytes
8fb0: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
8fc0: 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 20  -tree leaf page 
8fd0: 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f  is the smaller o
8fe0: 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  f.M+((P-M)%(U-4)
8ff0: 29 20 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e 28  ) and U-35.)^.^(
9000: 4e 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72  Note that number
9010: 20 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64   of bytes stored
9020: 20 6f 6e 20 74 68 65 20 6c 65 61 66 20 70 61 67   on the leaf pag
9030: 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20  e is never less 
9040: 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f  than M.)^.</p></
9050: 64 64 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42  dd>..<dt>Table B
9060: 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43  -Tree Interior C
9070: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
9080: 3e 0a 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73  >.Interior pages
9090: 20 6f 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65   of table b-tree
90a0: 73 20 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61  s have no payloa
90b0: 64 20 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69  d and so there i
90c0: 73 20 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c  s never.any payl
90d0: 6f 61 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f  oad to spill..</
90e0: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64  p></dd>..<dt>Ind
90f0: 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f  ex B-Tree Leaf O
9100: 72 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  r Interior Cell:
9110: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28  </dt>.<dd><p>.^(
9120: 4c 65 74 20 58 20 62 65 20 28 28 55 2d 31 32 29  Let X be ((U-12)
9130: 2a 36 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49  *64/255)-23).  I
9140: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69  f the payload si
9150: 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61  ze P is less tha
9160: 6e 0a 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20  n.or equal to X 
9170: 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20  then the entire 
9180: 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65  payload is store
9190: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
91a0: 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20  page.)^.^(Let M 
91b0: 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35  be ((U-12)*32/25
91c0: 35 29 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20  5)-23.  If P is 
91d0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 58 20 74  greater than X t
91e0: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  hen the number.o
91f0: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
9200: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
9210: 65 20 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72  e is the smaller
9220: 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d   of.M+((P-M)%(U-
9230: 34 29 29 20 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e  4)) and X.)^.^(N
9240: 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20  ote that number 
9250: 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20  of bytes stored 
9260: 6f 6e 20 74 68 65 20 69 6e 64 65 78 20 70 61 67  on the index pag
9270: 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20  e is never less 
9280: 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f  than M.)^.</p></
9290: 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b  dd>.</dl></block
92a0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f  quote>..<p>The o
92b0: 76 65 72 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c  verflow threshol
92c0: 64 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  ds are designed 
92d0: 74 6f 20 67 69 76 65 20 61 20 6d 69 6e 69 6d 75  to give a minimu
92e0: 6d 20 66 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f  m fanout of.4 fo
92f0: 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20  r index b-trees 
9300: 61 6e 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  and to make sure
9310: 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 70   enough of the p
9320: 61 79 6c 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65  ayload.is on the
9330: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 61   b-tree page tha
9340: 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  t the record hea
9350: 64 65 72 20 63 61 6e 20 75 73 75 61 6c 6c 79 20  der can usually 
9360: 62 65 20 61 63 63 65 73 73 65 64 0a 77 69 74 68  be accessed.with
9370: 6f 75 74 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61  out consulting a
9380: 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2e  n overflow page.
9390: 20 20 49 6e 20 68 69 6e 64 73 69 67 68 74 2c 20    In hindsight, 
93a0: 74 68 65 20 64 65 73 69 67 6e 65 72 73 20 6f 66  the designers of
93b0: 0a 74 68 65 20 53 51 4c 69 74 65 20 62 2d 74 72  .the SQLite b-tr
93c0: 65 65 20 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65  ee logic realize
93d0: 20 74 68 61 74 20 74 68 65 73 65 20 74 68 72 65   that these thre
93e0: 73 68 6f 6c 64 73 20 63 6f 75 6c 64 20 68 61 76  sholds could hav
93f0: 65 20 62 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68  e been.made much
9400: 20 73 69 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76   simpler.  Howev
9410: 65 72 2c 20 74 68 65 20 63 6f 6d 70 75 74 61 74  er, the computat
9420: 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 63  ions cannot be c
9430: 68 61 6e 67 65 64 0a 77 69 74 68 6f 75 74 20 72  hanged.without r
9440: 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69  esulting in an i
9450: 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66 69 6c 65  ncompatible file
9460: 20 66 6f 72 6d 61 74 2e 20 20 41 6e 64 20 74 68   format.  And th
9470: 65 20 63 75 72 72 65 6e 74 20 63 6f 6d 70 75 74  e current comput
9480: 61 74 69 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c  ations.work well
9490: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 79 20 61  , even if they a
94a0: 72 65 20 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70  re a little comp
94b0: 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  lex.</p>..<tcl>h
94c0: 64 5f 66 72 61 67 6d 65 6e 74 20 6f 76 66 6c 70  d_fragment ovflp
94d0: 67 73 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67  gs {overflow pag
94e0: 65 7d 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67  e} {overflow pag
94f0: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e  es}</tcl>.<h3>1.
9500: 36 20 43 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f  6 Cell Payload O
9510: 76 65 72 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68  verflow Pages</h
9520: 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  3>..<p>^When the
9530: 20 70 61 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d   payload of a b-
9540: 74 72 65 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f  tree cell is too
9550: 20 6c 61 72 67 65 20 66 6f 72 20 74 68 65 20 62   large for the b
9560: 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20  -tree page,.the 
9570: 73 75 72 70 6c 75 73 20 69 73 20 73 70 69 6c 6c  surplus is spill
9580: 65 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77  ed onto overflow
9590: 20 70 61 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c   pages.  ^Overfl
95a0: 6f 77 20 70 61 67 65 73 20 66 6f 72 6d 20 61 20  ow pages form a 
95b0: 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54  linked.list.  ^T
95c0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 62 79  he first four by
95d0: 74 65 73 20 6f 66 20 65 61 63 68 20 6f 76 65 72  tes of each over
95e0: 66 6c 6f 77 20 70 61 67 65 20 61 72 65 20 61 20  flow page are a 
95f0: 62 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67  big-endian.integ
9600: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
9610: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
9620: 68 65 20 6e 65 78 74 20 70 61 67 65 20 69 6e 20  he next page in 
9630: 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65  the chain, or ze
9640: 72 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e 61 6c  ro.for the final
9650: 20 70 61 67 65 20 69 6e 20 74 68 65 20 63 68 61   page in the cha
9660: 69 6e 2e 20 20 5e 54 68 65 20 66 69 66 74 68 20  in.  ^The fifth 
9670: 62 79 74 65 20 74 68 72 6f 75 67 68 20 74 68 65  byte through the
9680: 20 6c 61 73 74 20 75 73 61 62 6c 65 0a 62 79 74   last usable.byt
9690: 65 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  e are used to ho
96a0: 6c 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74  ld overflow cont
96b0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e  ent.</p>..<h3>1.
96c0: 37 20 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72  7 Pointer Map or
96d0: 20 50 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68   Ptrmap Pages</h
96e0: 33 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d  3>..<p>Pointer m
96f0: 61 70 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67  ap or ptrmap pag
9700: 65 73 20 61 72 65 20 65 78 74 72 61 20 70 61 67  es are extra pag
9710: 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  es inserted into
9720: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f   the database.to
9730: 20 6d 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74   make the operat
9740: 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63  ion of [auto_vac
9750: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
9760: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
9770: 64 65 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65  des.more efficie
9780: 6e 74 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20  nt.  Other page 
9790: 74 79 70 65 73 20 69 6e 20 74 68 65 20 64 61 74  types in the dat
97a0: 61 62 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20  abase typically 
97b0: 68 61 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72  have pointers.fr
97c0: 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69  om parent to chi
97d0: 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ld.  For example
97e0: 2c 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  , an interior b-
97f0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69  tree page contai
9800: 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69  ns pointers.to i
9810: 74 73 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20  ts child b-tree 
9820: 70 61 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65  pages and an ove
9830: 72 66 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20  rflow chain has 
9840: 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65  a pointer.from e
9850: 61 72 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20  arlier to later 
9860: 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61  links in the cha
9870: 69 6e 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61  in.  A ptrmap pa
9880: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b  ge contains link
9890: 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  age.information 
98a0: 67 6f 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70  going in the opp
98b0: 6f 73 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c  osite direction,
98c0: 20 66 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70   from child to p
98d0: 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  arent.</p>..<p>^
98e0: 50 74 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73  Ptrmap pages mus
98f0: 74 20 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64  t exist in any d
9900: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 69  atabase file whi
9910: 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72  ch has a non-zer
9920: 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62  o.largest root b
9930: 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65  -tree page value
9940: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e   at offset 52 in
9950: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
9960: 61 64 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61  ader..^If the la
9970: 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65  rgest root b-tre
9980: 65 20 70 61 67 65 20 76 61 6c 75 65 20 69 73 20  e page value is 
9990: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64  zero, then the d
99a0: 61 74 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74  atabase must not
99b0: 0a 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20  .contain ptrmap 
99c0: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  pages.</p>..<p>^
99d0: 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 77 69  In a database wi
99e0: 74 68 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  th ptrmap pages,
99f0: 20 74 68 65 20 66 69 72 73 74 20 70 74 72 6d 61   the first ptrma
9a00: 70 20 70 61 67 65 20 69 73 20 70 61 67 65 20 32  p page is page 2
9a10: 2e 0a 41 20 70 74 72 6d 61 70 20 70 61 67 65 20  ..A ptrmap page 
9a20: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
9a30: 72 72 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65  rray of 5-byte e
9a40: 6e 74 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62  ntries.  Let J b
9a50: 65 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  e the.number of 
9a60: 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73 20 74  5-byte entries t
9a70: 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20  hat will fit in 
9a80: 74 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65  the usable space
9a90: 20 6f 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20   of a page..(In 
9aa0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55  other words, J=U
9ab0: 2f 35 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74  /5.)  ^The first
9ac0: 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c   ptrmap page wil
9ad0: 6c 20 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70  l contain back p
9ae0: 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69  ointer.informati
9af0: 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 33 20 74  on for pages 3 t
9b00: 68 72 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c  hrough J+2, incl
9b10: 75 73 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63  usive.  ^The sec
9b20: 6f 6e 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a  ond pointer map.
9b30: 70 61 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20  page will be on 
9b40: 70 61 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61  page J+3 and tha
9b50: 74 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69  t ptrmap page wi
9b60: 6c 6c 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20  ll provide back 
9b70: 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74  pointer.informat
9b80: 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b  ion for pages J+
9b90: 34 20 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20  4 through 2*J+3 
9ba0: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20  inclusive.  And 
9bb0: 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65  so forth for.the
9bc0: 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
9bd0: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   file.</p>..<p>^
9be0: 28 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 74  (In a database t
9bf0: 68 61 74 20 75 73 65 73 20 70 74 72 6d 61 70 20  hat uses ptrmap 
9c00: 70 61 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73  pages, all pages
9c10: 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64   at locations id
9c20: 65 6e 74 69 66 69 65 64 0a 62 79 20 74 68 65 20  entified.by the 
9c30: 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74  computation in t
9c40: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
9c50: 67 72 61 70 68 20 6d 75 73 74 20 62 65 20 70 74  graph must be pt
9c60: 72 6d 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f  rmap page and no
9c70: 0a 6f 74 68 65 72 20 70 61 67 65 20 6d 61 79 20  .other page may 
9c80: 62 65 20 61 20 70 74 72 6d 61 70 20 70 61 67 65  be a ptrmap page
9c90: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 74 68  .  Except, if th
9ca0: 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65  e byte-lock page
9cb0: 20 68 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c   happens to.fall
9cc0: 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67   on the same pag
9cd0: 65 20 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74  e number as a pt
9ce0: 72 6d 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20  rmap page, then 
9cf0: 74 68 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f  the ptrmap is mo
9d00: 76 65 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ved.to the follo
9d10: 77 69 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68  wing page for th
9d20: 61 74 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f  at one case.)^</
9d30: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79  p>..<p>Each 5-by
9d40: 74 65 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74  te entry on a pt
9d50: 72 6d 61 70 20 70 61 67 65 20 70 72 6f 76 69 64  rmap page provid
9d60: 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66  es back-link inf
9d70: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a  ormation about .
9d80: 6f 6e 65 20 6f 66 20 74 68 65 20 70 61 67 65 73  one of the pages
9d90: 20 74 68 61 74 20 69 6d 6d 65 64 69 61 74 65 6c   that immediatel
9da0: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69  y follow the poi
9db0: 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28 49 66 20  nter map.  ^(If 
9dc0: 70 61 67 65 20 42 20 69 73 20 61 0a 70 74 72 6d  page B is a.ptrm
9dd0: 61 70 20 70 61 67 65 20 74 68 65 6e 20 62 61 63  ap page then bac
9de0: 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69  k-link informati
9df0: 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b  on about page B+
9e00: 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 62 79  1 is provided by
9e10: 0a 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79  .the first entry
9e20: 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74 65 72 20   on the pointer 
9e30: 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f  map.  Informatio
9e40: 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b 32  n about page B+2
9e50: 20 69 73 0a 70 72 6f 76 69 64 65 64 20 62 79 20   is.provided by 
9e60: 74 68 65 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  the second entry
9e70: 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e  .  And so forth.
9e80: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  )^</p>..<p>Each 
9e90: 35 2d 62 79 74 65 20 70 74 72 6d 61 70 20 65 6e  5-byte ptrmap en
9ea0: 74 72 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  try consists of 
9eb0: 6f 6e 65 20 62 79 74 65 20 6f 66 20 22 70 61 67  one byte of "pag
9ec0: 65 20 74 79 70 65 22 20 69 6e 66 6f 72 6d 61 74  e type" informat
9ed0: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
9ee0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
9ef0: 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  ian page number.
9f00: 20 20 46 69 76 65 20 70 61 67 65 20 74 79 70 65    Five page type
9f10: 73 20 61 72 65 20 72 65 63 6f 67 6e 69 7a 65 64  s are recognized
9f20: 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  :.</p>..<ol>.<li
9f30: 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70  >A b-tree root p
9f40: 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e  age.  The.page n
9f50: 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 20  umber should be 
9f60: 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65  zero..<li>A free
9f70: 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 65 20  list page.  The 
9f80: 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75  page number shou
9f90: 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e  ld be.zero..<li>
9fa0: 54 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  The first page o
9fb0: 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64  f a.cell payload
9fc0: 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e   overflow chain.
9fd0: 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65    The page numbe
9fe0: 72 20 69 73 20 74 68 65 20 62 2d 74 72 65 65 20  r is the b-tree 
9ff0: 70 61 67 65 20 74 68 61 74 0a 63 6f 6e 74 61 69  page that.contai
a000: 6e 73 20 74 68 65 20 63 65 6c 6c 20 77 68 6f 73  ns the cell whos
a010: 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76  e content has ov
a020: 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20  erflowed..<li>A 
a030: 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 66  page in an overf
a040: 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68 65 72 20  low chain.other 
a050: 74 68 61 6e 20 74 68 65 20 66 69 72 73 74 20 70  than the first p
a060: 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e  age.  The page n
a070: 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 72 69  umber is the pri
a080: 6f 72 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  or page of the.o
a090: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c  verflow chain..<
a0a0: 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d  li>A non-root b-
a0b0: 74 72 65 65 20 70 61 67 65 2e 20 20 54 68 65 0a  tree page.  The.
a0c0: 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74  page number is t
a0d0: 68 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65  he parent b-tree
a0e0: 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   page..</ol>..<p
a0f0: 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61 62 61 73  >^In any databas
a100: 65 20 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74  e file that cont
a110: 61 69 6e 73 20 70 74 72 6d 61 70 20 70 61 67 65  ains ptrmap page
a120: 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f  s, all b-tree ro
a130: 6f 74 20 70 61 67 65 73 20 0a 6d 75 73 74 20 63  ot pages .must c
a140: 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6e  ome before any n
a150: 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  on-root b-tree p
a160: 61 67 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61  age, cell payloa
a170: 64 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2c  d overflow page,
a180: 20 6f 72 0a 66 72 65 65 6c 69 73 74 20 70 61 67   or.freelist pag
a190: 65 2e 20 20 54 68 69 73 20 72 65 73 74 72 69 63  e.  This restric
a1a0: 74 69 6f 6e 20 65 6e 73 75 72 65 73 20 74 68 61  tion ensures tha
a1b0: 74 20 61 20 72 6f 6f 74 20 70 61 67 65 20 77 69  t a root page wi
a1c0: 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65  ll never.be move
a1d0: 64 20 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f  d during an auto
a1e0: 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65  -vacuum or incre
a1f0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20  mental-vacuum.  
a200: 54 68 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a  The auto-vacuum.
a210: 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b  logic does not k
a220: 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70 64 61 74  now how to updat
a230: 65 20 74 68 65 20 72 6f 6f 74 5f 70 61 67 65 20  e the root_page 
a240: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
a250: 69 74 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65  ite_master.table
a260: 20 61 6e 64 20 73 6f 20 69 74 20 69 73 20 6e 65   and so it is ne
a270: 63 65 73 73 61 72 79 20 74 6f 20 70 72 65 76 65  cessary to preve
a280: 6e 74 20 72 6f 6f 74 20 70 61 67 65 73 20 66 72  nt root pages fr
a290: 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64  om being moved.d
a2a0: 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61  uring an auto-va
a2b0: 63 75 75 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f  cuum in order to
a2c0: 20 70 72 65 73 65 72 76 65 20 74 68 65 20 69 6e   preserve the in
a2d0: 74 65 67 72 69 74 79 20 6f 66 20 74 68 65 0a 73  tegrity of the.s
a2e0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
a2f0: 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65 73  le.  ^Root pages
a300: 20 61 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68   are moved to th
a310: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
a320: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
a330: 20 62 79 20 74 68 65 20 43 52 45 41 54 45 20 54   by the CREATE T
a340: 41 42 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44  ABLE, CREATE IND
a350: 45 58 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c 20  EX, DROP TABLE, 
a360: 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f  and.DROP INDEX o
a370: 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  perations.</p>..
a380: 3c 68 32 3e 32 2e 30 20 53 63 68 65 6d 61 20 4c  <h2>2.0 Schema L
a390: 61 79 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  ayer</h2>..<p>Th
a3a0: 65 20 66 6f 72 65 67 6f 69 6e 67 20 74 65 78 74  e foregoing text
a3b0: 20 64 65 73 63 72 69 62 65 73 20 6c 6f 77 2d 6c   describes low-l
a3c0: 65 76 65 6c 20 61 73 70 65 63 74 73 20 6f 66 20  evel aspects of 
a3d0: 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65 0a  the SQLite file.
a3e0: 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 62 2d 74  format.  The b-t
a3f0: 72 65 65 20 6d 65 63 68 61 6e 69 73 6d 20 70 72  ree mechanism pr
a400: 6f 76 69 64 65 73 20 61 20 70 6f 77 65 72 66 75  ovides a powerfu
a410: 6c 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74 20  l and efficient 
a420: 6d 65 61 6e 73 20 6f 66 0a 61 63 63 65 73 73 69  means of.accessi
a430: 6e 67 20 61 20 6c 61 72 67 65 20 64 61 74 61 20  ng a large data 
a440: 73 65 74 2e 20 20 54 68 69 73 20 73 65 63 74 69  set.  This secti
a450: 6f 6e 20 77 69 6c 6c 20 64 65 73 63 72 69 62 65  on will describe
a460: 20 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c 65 76   how the.low-lev
a470: 65 6c 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  el b-tree layer 
a480: 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
a490: 6d 65 6e 74 20 68 69 67 68 65 72 2d 6c 65 76 65  ment higher-leve
a4a0: 6c 20 53 51 4c 0a 63 61 70 61 62 69 6c 69 74 69  l SQL.capabiliti
a4b0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  es.</p>..<tcl>hd
a4c0: 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 6f 72 64  _fragment record
a4d0: 5f 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72 64 20  _format {record 
a4e0: 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
a4f0: 33 3e 32 2e 31 20 52 65 63 6f 72 64 20 46 6f 72  3>2.1 Record For
a500: 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  mat</h3>..<p>The
a510: 20 64 61 74 61 20 66 6f 72 20 61 20 74 61 62 6c   data for a tabl
a520: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
a530: 67 65 20 61 6e 64 20 74 68 65 20 6b 65 79 0a 6f  ge and the key.o
a540: 66 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  f an index b-tre
a550: 65 20 70 61 67 65 20 77 61 73 20 63 68 61 72 61  e page was chara
a560: 63 74 65 72 69 7a 65 64 20 61 62 6f 76 65 0a 61  cterized above.a
a570: 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  s an arbitrary s
a580: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
a590: 2e 0a 54 68 65 20 70 72 69 6f 72 20 64 69 73 63  ..The prior disc
a5a0: 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64  ussion mentioned
a5b0: 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67 20 6c   one key being l
a5c0: 65 73 73 20 74 68 61 6e 20 61 6e 6f 74 68 65 72  ess than another
a5d0: 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74 20 64 65  , but.did not de
a5e0: 66 69 6e 65 20 77 68 61 74 20 22 6c 65 73 73 20  fine what "less 
a5f0: 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20 54 68  than" meant.  Th
a600: 65 20 63 75 72 72 65 6e 74 20 73 65 63 74 69 6f  e current sectio
a610: 6e 20 77 69 6c 6c 20 61 64 64 72 65 73 73 0a 74  n will address.t
a620: 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c  hese omissions.<
a630: 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c  /p>..<p>Payload,
a640: 20 65 69 74 68 65 72 20 74 61 62 6c 65 20 62 2d   either table b-
a650: 74 72 65 65 20 64 61 74 61 20 6f 72 20 69 6e 64  tree data or ind
a660: 65 78 20 62 2d 74 72 65 65 20 6b 65 79 73 2c 20  ex b-tree keys, 
a670: 0a 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74 68  .is always in th
a680: 65 20 22 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e "record format
a690: 22 2e 0a 54 68 65 20 72 65 63 6f 72 64 20 66 6f  "..The record fo
a6a0: 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20 73  rmat defines a s
a6b0: 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75 65  equence of value
a6c0: 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a  s corresponding.
a6d0: 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20  to columns in a 
a6e0: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
a6f0: 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   The record form
a700: 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
a710: 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75 6d   number.of colum
a720: 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79 70 65  ns, the datatype
a730: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c   of each column,
a740: 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74   and the content
a750: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e   of each column.
a760: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 63  </p>..<p>The rec
a770: 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b 65 73  ord format makes
a780: 20 65 78 74 65 6e 73 69 76 65 20 75 73 65 20 6f   extensive use o
a790: 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62 6c 65  f the .[variable
a7a0: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 5d  -length integer]
a7b0: 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72 65 70   or [varint].rep
a7c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 36  resentation of 6
a7d0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
a7e0: 65 67 65 72 73 20 64 65 66 69 6e 65 64 20 61 62  egers defined ab
a7f0: 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ove.</p>..<tcl>h
a800: 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72 69 61  d_fragment seria
a810: 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20 74 79  ltype {serial ty
a820: 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79 70 65  pe} {serial type
a830: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72 65  s}</tcl>.<p>A re
a840: 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 61 20  cord contains a 
a850: 68 65 61 64 65 72 20 61 6e 64 20 61 20 62 6f 64  header and a bod
a860: 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64 65 72  y, in that order
a870: 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64 65 72  .  .^(The header
a880: 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73   begins with a s
a890: 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77 68 69  ingle varint whi
a8a0: 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
a8b0: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 0a 6f  e total number.o
a8c0: 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
a8d0: 65 61 64 65 72 2e 20 20 54 68 65 20 76 61 72 69  eader.  The vari
a8e0: 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  nt value is the 
a8f0: 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  size of the head
a900: 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e 63 6c  er in.bytes incl
a910: 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  uding the size v
a920: 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29 5e 20  arint itself.)^ 
a930: 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20   ^Following the 
a940: 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 0a  size varint are.
a950: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64 64 69  one or more addi
a960: 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20  tional varints, 
a970: 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20  one per column. 
a980: 20 54 68 65 73 65 20 61 64 64 69 74 69 6f 6e 61   These additiona
a990: 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20 63 61  l varints.are ca
a9a0: 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74 79 70  lled "serial typ
a9b0: 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a 64  e" numbers and.d
a9c0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 61 74  etermine the dat
a9d0: 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f  atype of each co
a9e0: 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67 20  lumn, according 
a9f0: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
aa00: 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63 65   chart:</p>..<ce
aa10: 6e 74 65 72 3e 0a 3c 69 3e 53 65 72 69 61 6c 20  nter>.<i>Serial 
aa20: 54 79 70 65 20 43 6f 64 65 73 20 4f 66 20 54 68  Type Codes Of Th
aa30: 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c  e Record Format<
aa40: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
aa50: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
aa60: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 53 65 72  r=1>.<tr><th>Ser
aa70: 69 61 6c 20 54 79 70 65 3c 74 68 3e 43 6f 6e 74  ial Type<th>Cont
aa80: 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d 65 61 6e  ent Size<th>Mean
aa90: 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ing.<tr><td vali
aaa0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
aab0: 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>0<td valign=
aac0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
aad0: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >0<td align=left
aae0: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 4e 55  >.^Value is a NU
aaf0: 4c 4c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  LL..<tr><td vali
ab00: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ab10: 74 65 72 3e 31 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>1<td valign=
ab20: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
ab30: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
ab40: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 6e 20 38  >.^Value is an 8
ab50: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
ab60: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
ab70: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
ab80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c   align=center>2<
ab90: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
aba0: 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20  ign=center>2<td 
abb0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
abc0: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
abd0: 61 6e 20 31 36 2d 62 69 74 20 74 77 6f 73 2d 63  an 16-bit twos-c
abe0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
abf0: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
ac00: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ac10: 65 72 3e 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>3<td valign=t
ac20: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ac30: 33 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  3<td align=left>
ac40: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
ac50: 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20 74  -endian 24-bit t
ac60: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
ac70: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
ac80: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
ac90: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c  =center>4<td val
aca0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
acb0: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
acc0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
acd0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d  a big-endian 32-
ace0: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
acf0: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
ad00: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
ad10: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c 74  align=center>5<t
ad20: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
ad30: 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 61  gn=center>6<td a
ad40: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
ad50: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
ad60: 6e 20 34 38 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 48-bit twos-co
ad70: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
ad80: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
ad90: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ada0: 72 3e 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>6<td valign=to
adb0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
adc0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
add0: 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d  ^Value is a big-
ade0: 65 6e 64 69 61 6e 20 36 34 2d 62 69 74 20 74 77  endian 64-bit tw
adf0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
ae00: 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76  teger..<tr><td v
ae10: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ae20: 63 65 6e 74 65 72 3e 37 3c 74 64 20 76 61 6c 69  center>7<td vali
ae30: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ae40: 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>8<td align=l
ae50: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
ae60: 20 62 69 67 2d 65 6e 64 69 61 6e 20 49 45 45 45   big-endian IEEE
ae70: 20 37 35 34 2d 32 30 30 38 20 36 34 2d 62 69 74   754-2008 64-bit
ae80: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
ae90: 6e 75 6d 62 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  number..<tr><td 
aea0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
aeb0: 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c  =center>8<td val
aec0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
aed0: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
aee0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
aef0: 74 68 65 20 69 6e 74 65 67 65 72 20 30 2e 20 28  the integer 0. (
af00: 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66  Only available f
af10: 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61  or [schema forma
af20: 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65 72 2e  t] 4 and higher.
af30: 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ).<tr><td valign
af40: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
af50: 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>9<td valign=to
af60: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
af70: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
af80: 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69 6e  ^Value is the in
af90: 74 65 67 65 72 20 31 2e 20 28 4f 6e 6c 79 20 61  teger 1. (Only a
afa0: 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73 63  vailable for [sc
afb0: 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20 61  hema format] 4 a
afc0: 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72 3e  nd higher.).<tr>
afd0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
afe0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 30 2c 31  lign=center>10,1
aff0: 31 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  1.    <td valign
b000: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b010: 72 3e 26 6e 62 73 70 3b 3c 74 64 20 61 6c 69 67  r>&nbsp;<td alig
b020: 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75  n=left>.<i>Not u
b030: 73 65 64 2e 20 20 52 65 73 65 72 76 65 64 20 66  sed.  Reserved f
b040: 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69  or expansion.</i
b050: 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  >.<tr><td valign
b060: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b070: 72 3e 4e 26 23 78 32 32 36 35 3b 31 32 20 61 6e  r>N&#x2265;12 an
b080: 64 20 65 76 65 6e 0a 20 20 20 20 3c 74 64 20 76  d even.    <td v
b090: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b0a0: 63 65 6e 74 65 72 3e 28 4e 2d 31 32 29 2f 32 3c  center>(N-12)/2<
b0b0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
b0c0: 56 61 6c 75 65 20 69 73 20 61 20 42 4c 4f 42 20  Value is a BLOB 
b0d0: 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f 32  that is (N-12)/2
b0e0: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
b0f0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
b100: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b110: 72 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61 6e  r>N&#x2265;13 an
b120: 64 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76 61  d odd.    <td va
b130: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b140: 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74  enter>(N-13)/2<t
b150: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56  d align=left>.^V
b160: 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67  alue is a string
b170: 20 69 6e 20 74 68 65 20 5b 74 65 78 74 20 65 6e   in the [text en
b180: 63 6f 64 69 6e 67 5d 20 61 6e 64 20 28 4e 2d 31  coding] and (N-1
b190: 33 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65  3)/2 bytes in le
b1a0: 6e 67 74 68 2e 0a 5e 54 68 65 20 6e 75 6c 20 74  ngth..^The nul t
b1b0: 65 72 6d 69 6e 61 74 6f 72 20 69 73 20 6e 6f 74  erminator is not
b1c0: 20 73 74 6f 72 65 64 2e 0a 3c 2f 74 61 62 6c 65   stored..</table
b1d0: 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 4e  ></center>..<p>N
b1e0: 6f 74 65 20 74 68 61 74 20 62 65 63 61 75 73 65  ote that because
b1f0: 20 6f 66 20 74 68 65 20 77 61 79 20 76 61 72 69   of the way vari
b200: 6e 74 73 20 61 72 65 20 64 65 66 69 6e 65 64 2c  nts are defined,
b210: 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a 65   the header size
b220: 20 76 61 72 69 6e 74 0a 61 6e 64 20 73 65 72 69   varint.and seri
b230: 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73 20  al type varints 
b240: 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 63 6f 6e  will usually con
b250: 73 69 73 74 20 6f 66 20 61 20 73 69 6e 67 6c 65  sist of a single
b260: 20 62 79 74 65 2e 20 20 54 68 65 0a 73 65 72 69   byte.  The.seri
b270: 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73 20  al type varints 
b280: 66 6f 72 20 6c 61 72 67 65 20 73 74 72 69 6e 67  for large string
b290: 73 20 61 6e 64 20 42 4c 4f 42 73 20 6d 69 67 68  s and BLOBs migh
b2a0: 74 20 65 78 74 65 6e 64 20 74 6f 20 74 77 6f 20  t extend to two 
b2b0: 6f 72 20 74 68 72 65 65 0a 62 79 74 65 20 76 61  or three.byte va
b2c0: 72 69 6e 74 73 2c 20 62 75 74 20 74 68 61 74 20  rints, but that 
b2d0: 69 73 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  is the exception
b2e0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
b2f0: 20 72 75 6c 65 2e 20 0a 54 68 65 20 76 61 72 69   rule. .The vari
b300: 6e 74 20 66 6f 72 6d 61 74 20 69 73 20 76 65 72  nt format is ver
b310: 79 20 65 66 66 69 63 69 65 6e 74 20 61 74 20 63  y efficient at c
b320: 6f 64 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oding the record
b330: 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   header.</p>..<p
b340: 3e 5e 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  >^The values for
b350: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
b360: 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64  the record immed
b370: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68  iately follow th
b380: 65 20 68 65 61 64 65 72 2e 0a 5e 28 4e 6f 74 65  e header..^(Note
b390: 20 74 68 61 74 20 66 6f 72 20 73 65 72 69 61 6c   that for serial
b3a0: 20 74 79 70 65 73 20 30 2c 20 38 2c 20 39 2c 20   types 0, 8, 9, 
b3b0: 31 32 2c 20 61 6e 64 20 31 33 2c 20 74 68 65 20  12, and 13, the 
b3c0: 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 20 62 79  value is zero by
b3d0: 74 65 73 20 69 6e 0a 6c 65 6e 67 74 68 2e 20 20  tes in.length.  
b3e0: 49 66 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 61  If all columns a
b3f0: 72 65 20 6f 66 20 74 68 65 73 65 20 74 79 70 65  re of these type
b400: 73 20 74 68 65 6e 20 74 68 65 20 62 6f 64 79 20  s then the body 
b410: 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 0a 72  section of the.r
b420: 65 63 6f 72 64 20 69 73 20 65 6d 70 74 79 2e 29  ecord is empty.)
b430: 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 32 20 52  ^</p>..<h3>2.2 R
b440: 65 63 6f 72 64 20 53 6f 72 74 20 4f 72 64 65 72  ecord Sort Order
b450: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 6f 72  </h3>..<p>The or
b460: 64 65 72 20 6f 66 20 6b 65 79 73 20 69 6e 20 61  der of keys in a
b470: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69  n index b-tree i
b480: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
b490: 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f  the sort order o
b4a0: 66 0a 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  f.the records th
b4b0: 61 74 20 74 68 65 20 6b 65 79 73 20 72 65 70 72  at the keys repr
b4c0: 65 73 65 6e 74 2e 20 20 52 65 63 6f 72 64 20 63  esent.  Record c
b4d0: 6f 6d 70 61 72 69 73 6f 6e 20 70 72 6f 67 72 65  omparison progre
b4e0: 73 73 65 73 20 63 6f 6c 75 6d 6e 0a 62 79 20 63  sses column.by c
b4f0: 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75 6d 6e 73 20  olumn.  Columns 
b500: 6f 66 20 61 20 72 65 63 6f 72 64 20 61 72 65 20  of a record are 
b510: 65 78 61 6d 69 6e 65 64 20 66 72 6f 6d 20 6c 65  examined from le
b520: 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 54 68  ft to right.  Th
b530: 65 0a 66 69 72 73 74 20 70 61 69 72 20 6f 66 20  e.first pair of 
b540: 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
b550: 20 6e 6f 74 20 65 71 75 61 6c 20 64 65 74 65 72   not equal deter
b560: 6d 69 6e 65 73 20 74 68 65 20 72 65 6c 61 74 69  mines the relati
b570: 76 65 20 6f 72 64 65 72 0a 6f 66 20 74 68 65 20  ve order.of the 
b580: 74 77 6f 20 72 65 63 6f 72 64 73 2e 20 20 54 68  two records.  Th
b590: 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f 66 20  e sort order of 
b5a0: 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d  individual colum
b5b0: 6e 73 20 69 73 20 61 73 0a 66 6f 6c 6c 6f 77 73  ns is as.follows
b5c0: 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
b5d0: 5e 28 4e 55 4c 4c 20 76 61 6c 75 65 73 20 28 73  ^(NULL values (s
b5e0: 65 72 69 61 6c 20 74 79 70 65 20 30 29 20 73 6f  erial type 0) so
b5f0: 72 74 20 66 69 72 73 74 2e 29 5e 0a 3c 6c 69 3e  rt first.)^.<li>
b600: 5e 28 4e 75 6d 65 72 69 63 20 76 61 6c 75 65 73  ^(Numeric values
b610: 20 28 73 65 72 69 61 6c 20 74 79 70 65 73 20 31   (serial types 1
b620: 20 74 68 72 6f 75 67 68 20 39 29 20 73 6f 72 74   through 9) sort
b630: 20 61 66 74 65 72 20 4e 55 4c 4c 73 0a 20 20 20   after NULLs.   
b640: 20 20 20 61 6e 64 20 69 6e 20 6e 75 6d 65 72 69     and in numeri
b650: 63 20 6f 72 64 65 72 2e 29 5e 0a 3c 6c 69 3e 5e  c order.)^.<li>^
b660: 28 54 65 78 74 20 76 61 6c 75 65 73 20 28 6f 64  (Text values (od
b670: 64 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 31  d serial types 1
b680: 33 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f  3 and larger) so
b690: 72 74 20 61 66 74 65 72 20 6e 75 6d 65 72 69 63  rt after numeric
b6a0: 0a 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 74  .    values in t
b6b0: 68 65 20 6f 72 64 65 72 20 64 65 74 65 72 6d 69  he order determi
b6c0: 6e 65 64 20 62 79 20 74 68 65 20 63 6f 6c 75 6d  ned by the colum
b6d0: 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ns [collating fu
b6e0: 6e 63 74 69 6f 6e 5d 2e 29 5e 0a 3c 6c 69 3e 5e  nction].)^.<li>^
b6f0: 28 42 4c 4f 42 20 76 61 6c 75 65 73 20 28 65 76  (BLOB values (ev
b700: 65 6e 20 73 65 72 69 61 6c 20 74 79 70 65 73 20  en serial types 
b710: 31 32 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73  12 and larger) s
b720: 6f 72 74 20 6c 61 73 74 20 61 6e 64 20 69 6e 20  ort last and in 
b730: 74 68 65 20 6f 72 64 65 72 20 0a 20 20 20 20 64  the order .    d
b740: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6d 65 6d  etermined by mem
b750: 63 6d 70 28 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 0a  cmp().)^.</ol>..
b760: 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74 69 6e 67 20  <p>A [collating 
b770: 66 75 6e 63 74 69 6f 6e 5d 20 66 6f 72 20 65 61  function] for ea
b780: 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63  ch column is nec
b790: 65 73 73 61 72 79 20 69 6e 20 6f 72 64 65 72 20  essary in order 
b7a0: 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f  to compute.the o
b7b0: 72 64 65 72 20 6f 66 20 74 65 78 74 20 66 69 65  rder of text fie
b7c0: 6c 64 73 2e 0a 5e 28 53 51 4c 69 74 65 20 64 65  lds..^(SQLite de
b7d0: 66 69 6e 65 73 20 74 68 72 65 65 20 62 75 69 6c  fines three buil
b7e0: 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66  t-in collating f
b7f0: 75 6e 63 74 69 6f 6e 73 3a 29 5e 0a 3c 2f 70 3e  unctions:)^.</p>
b800: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74  ..<blockquote><t
b810: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
b820: 6c 6c 73 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74  llspacing=10>.<t
b830: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b840: 3e 42 49 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e  >BINARY.    <td>
b850: 20 5e 28 54 68 65 20 62 75 69 6c 74 2d 69 6e 20   ^(The built-in 
b860: 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6f 6e  BINARY collation
b870: 20 63 6f 6d 70 61 72 65 73 20 73 74 72 69 6e 67   compares string
b880: 73 20 62 79 74 65 20 62 79 20 62 79 74 65 0a 20  s byte by byte. 
b890: 20 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 65         using the
b8a0: 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74 69   memcmp() functi
b8b0: 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f 6d 20  on.        from 
b8c0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
b8d0: 69 62 72 61 72 79 2e 29 5e 0a 3c 74 72 3e 3c 74  ibrary.)^.<tr><t
b8e0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43  d valign=top>NOC
b8f0: 41 53 45 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54  ASE.    <td> ^(T
b900: 68 65 20 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74  he NOCASE collat
b910: 69 6f 6e 20 69 73 20 6c 69 6b 65 20 42 49 4e 41  ion is like BINA
b920: 52 59 20 65 78 63 65 70 74 20 74 68 61 74 20 75  RY except that u
b930: 70 70 65 72 63 61 73 65 0a 20 20 20 20 20 20 20  ppercase.       
b940: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
b950: 73 20 28 27 41 27 20 74 68 72 6f 75 67 68 20 27  s ('A' through '
b960: 5a 27 29 0a 20 20 20 20 20 20 20 20 61 72 65 20  Z').        are 
b970: 66 6f 6c 64 65 64 20 69 6e 74 6f 20 74 68 65 69  folded into thei
b980: 72 20 6c 6f 77 65 72 63 61 73 65 20 65 71 75 69  r lowercase equi
b990: 76 61 6c 65 6e 74 73 20 70 72 69 6f 72 20 74 6f  valents prior to
b9a0: 20 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20   running the.   
b9b0: 20 20 20 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e       comparison.
b9c0: 20 20 4e 6f 74 65 20 74 68 61 74 20 6f 6e 6c 79    Note that only
b9d0: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
b9e0: 73 20 61 72 65 20 63 61 73 65 2d 66 6f 6c 64 65  s are case-folde
b9f0: 64 2e 29 5e 0a 20 20 20 20 20 20 20 20 5e 28 4e  d.)^.        ^(N
ba00: 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20 64 6f  OCASE.        do
ba10: 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  es not implement
ba20: 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f   a general purpo
ba30: 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73 65 6c  se unicode casel
ba40: 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 29  ess comparison.)
ba50: 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ^.<tr><td valign
ba60: 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20 3c  =top>RTRIM.    <
ba70: 74 64 3e 20 5e 28 52 54 52 49 4d 20 69 73 20 6c  td> ^(RTRIM is l
ba80: 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70  ike BINARY excep
ba90: 74 20 74 68 61 74 20 65 78 74 72 61 20 73 70 61  t that extra spa
baa0: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ces at the end o
bab0: 66 20 65 69 74 68 65 72 0a 20 20 20 20 20 20 20  f either.       
bac0: 20 20 73 74 72 69 6e 67 20 64 6f 20 6e 6f 74 20    string do not 
bad0: 63 68 61 6e 67 65 20 74 68 65 20 72 65 73 75 6c  change the resul
bae0: 74 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  t.  In other wor
baf0: 64 73 2c 20 73 74 72 69 6e 67 73 20 77 69 6c 6c  ds, strings will
bb00: 0a 20 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72  .         compar
bb10: 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  e equal to one a
bb20: 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e 67 20 61  nother as long a
bb30: 73 20 74 68 65 79 0a 20 20 20 20 20 20 20 20 20  s they.         
bb40: 64 69 66 66 65 72 20 6f 6e 6c 79 20 69 6e 20 74  differ only in t
bb50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 70 61  he number of spa
bb60: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 2e 29  ces at the end.)
bb70: 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  ^.</table></bloc
bb80: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64  kquote>..<p>^Add
bb90: 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74  itional applicat
bba0: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c  ion-specific col
bbb0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
bbc0: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f   can be added to
bbd0: 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68  .SQLite using th
bbe0: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
bbf0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69  e_collation()] i
bc00: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
bc10: 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  p>^The default c
bc20: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
bc30: 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
bc40: 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e 41 6c  s is BINARY..^Al
bc50: 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74  ternative collat
bc60: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f  ing functions fo
bc70: 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20  r table columns 
bc80: 63 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64  can be specified
bc90: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
bca0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
bcb0: 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41   using the COLLA
bcc0: 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65  TE clause on the
bcd0: 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   [column definit
bce0: 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20 63 6f  ion]..^When a co
bcf0: 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c  lumn is indexed,
bd00: 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74   the same collat
bd10: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
bd20: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
bd30: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
bd40: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66  tement is used f
bd50: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  or the column in
bd60: 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64   the index, by d
bd70: 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74  efault,.though t
bd80: 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72  his can be overr
bd90: 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f  idden using a CO
bda0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
bdb0: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44  the .[CREATE IND
bdc0: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  EX] statement...
bdd0: 3c 68 33 3e 32 2e 33 20 52 65 70 72 65 73 65 6e  <h3>2.3 Represen
bde0: 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61  tation Of SQL Ta
bdf0: 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  bles</h3>..<p> ^
be00: 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51  Each ordinary SQ
be10: 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  L table in the d
be20: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
be30: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e  s represented on
be40: 2d 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65  -disk.by a table
be50: 20 62 2d 74 72 65 65 2e 20 20 5e 45 61 63 68 20   b-tree.  ^Each 
be60: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62  entry in the tab
be70: 6c 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73  le b-tree corres
be80: 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f  ponds to a row.o
be90: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e  f the SQL table.
bea0: 20 20 5e 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f    ^The [rowid] o
beb0: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20  f the SQL table 
bec0: 69 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69  is the 64-bit si
bed0: 67 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79  gned.integer key
bee0: 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20   for each entry 
bef0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
bf00: 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  ree.</p>..<p> ^T
bf10: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61  he content of ea
bf20: 63 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77  ch SQL table row
bf30: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
bf40: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
bf50: 62 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69  by.first combini
bf60: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ng the values in
bf70: 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c   the various col
bf80: 75 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65  umns into a byte
bf90: 20 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65   array.in the re
bfa0: 63 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65  cord format, the
bfb0: 6e 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62  n storing that b
bfc0: 79 74 65 20 61 72 72 61 79 20 61 73 20 74 68 65  yte array as the
bfd0: 20 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65   payload in.an e
bfe0: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
bff0: 65 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20  e b-tree.  ^The 
c000: 6f 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20  order of values 
c010: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 73  in the record is
c020: 0a 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65  .the same as the
c030: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e   order of column
c040: 73 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62  s in the SQL tab
c050: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e  le definition..^
c060: 57 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  When an SQL tabl
c070: 65 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49  e includes an.[I
c080: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
c090: 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63  EY] column (whic
c0a0: 68 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72  h aliases the [r
c0b0: 6f 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74  owid]) then that
c0c0: 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20  .column appears 
c0d0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 73  in the record as
c0e0: 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20   a NULL value.  
c0f0: 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77  ^SQLite will alw
c100: 61 79 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c  ays use.the tabl
c110: 65 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74  e b-tree key rat
c120: 68 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c  her than the NUL
c130: 4c 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66  L value when ref
c140: 65 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e  erencing the.[IN
c150: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c160: 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a  Y] column.</p>..
c170: 3c 70 3e 20 5e 49 66 20 74 68 65 20 5b 61 66 66  <p> ^If the [aff
c180: 69 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75  inity] of a colu
c190: 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74  mn is REAL and t
c1a0: 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  hat column conta
c1b0: 69 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74  ins a.value that
c1c0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65   can be converte
c1d0: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
c1e0: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
c1f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20  information.(if 
c200: 74 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  the value contai
c210: 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c  ns no fractional
c220: 20 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74   part and is not
c230: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65   too large to be
c240: 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20  .represented as 
c250: 61 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e  an integer) then
c260: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20   the column may 
c270: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  be stored in the
c280: 20 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e   record.as an in
c290: 74 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20  teger.  ^SQLite 
c2a0: 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65  will convert the
c2b0: 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66   value back to f
c2c0: 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68  loating.point wh
c2d0: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74  en extracting it
c2e0: 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
c2f0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 34 20 52  .</p>..<h3>2.4 R
c300: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
c310: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 54   WITHOUT ROWID T
c320: 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ables</h3>..<p>^
c330: 49 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  If an SQL table 
c340: 69 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  is created using
c350: 20 74 68 65 20 22 57 49 54 48 4f 55 54 20 52 4f   the "WITHOUT RO
c360: 57 49 44 22 20 63 6c 61 75 73 65 20 61 74 20 74  WID" clause at t
c370: 68 65 0a 65 6e 64 20 6f 66 20 69 74 73 20 43 52  he.end of its CR
c380: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
c390: 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 61 74 20  ment, then that 
c3a0: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
c3b0: 4f 55 54 20 52 4f 57 49 44 5d 0a 74 61 62 6c 65  OUT ROWID].table
c3c0: 20 61 6e 64 20 75 73 65 73 20 61 20 64 69 66 66   and uses a diff
c3d0: 65 72 65 6e 74 20 6f 6e 2d 64 69 73 6b 20 72 65  erent on-disk re
c3e0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 5e  presentation.  ^
c3f0: 41 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a  A WITHOUT ROWID.
c400: 74 61 62 6c 65 20 75 73 65 73 20 61 6e 20 69 6e  table uses an in
c410: 64 65 78 20 62 2d 74 72 65 65 20 72 61 74 68 65  dex b-tree rathe
c420: 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62  r than a table b
c430: 2d 74 72 65 65 20 66 6f 72 20 73 74 6f 72 61 67  -tree for storag
c440: 65 2e 0a 5e 54 68 65 20 6b 65 79 20 66 6f 72 20  e..^The key for 
c450: 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68  each entry in th
c460: 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  e WITHOUT ROWID 
c470: 62 2d 74 72 65 65 20 69 73 20 61 20 72 65 63 6f  b-tree is a reco
c480: 72 64 20 63 6f 6d 70 6f 73 65 64 0a 6f 66 20 74  rd composed.of t
c490: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
c4a0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
c4b0: 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 72 65  llowed by all re
c4c0: 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  maining columns 
c4d0: 6f 66 0a 74 68 65 20 74 61 62 6c 65 2e 20 20 5e  of.the table.  ^
c4e0: 54 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  The primary key 
c4f0: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c500: 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n the order they
c510: 20 74 68 65 79 20 77 65 72 65 0a 64 65 63 6c 61   they were.decla
c520: 72 65 64 20 69 6e 20 74 68 65 20 50 52 49 4d 41  red in the PRIMA
c530: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61 6e  RY KEY clause an
c540: 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
c550: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c560: 6e 0a 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n.the order they
c570: 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 43 52   occur in the CR
c580: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
c590: 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 48 65 6e 63 65  ment...<p>^Hence
c5a0: 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e  , the content en
c5b0: 63 6f 64 69 6e 67 20 66 6f 72 20 61 20 57 49 54  coding for a WIT
c5c0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
c5d0: 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20   is the same.as 
c5e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f  the content enco
c5f0: 64 69 6e 67 20 66 6f 72 20 61 6e 20 6f 72 64 69  ding for an ordi
c600: 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65  nary rowid table
c610: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
c620: 65 0a 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e.order of the c
c630: 6f 6c 75 6d 6e 73 20 69 73 20 72 65 61 72 72 61  olumns is rearra
c640: 6e 67 65 64 20 73 6f 20 74 68 61 74 20 50 52 49  nged so that PRI
c650: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
c660: 20 63 6f 6d 65 0a 66 69 72 73 74 2c 20 61 6e 64   come.first, and
c670: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
c680: 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
c690: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
c6a0: 65 65 20 72 61 74 68 65 72 0a 74 68 61 6e 20 61  ee rather.than a
c6b0: 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 61 20  s the data in a 
c6c0: 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 0a 5e 54  table b-tree..^T
c6d0: 68 65 20 73 70 65 63 69 61 6c 20 65 6e 63 6f 64  he special encod
c6e0: 69 6e 67 20 72 75 6c 65 73 20 66 6f 72 20 63 6f  ing rules for co
c6f0: 6c 75 6d 6e 73 20 77 69 74 68 20 52 45 41 4c 20  lumns with REAL 
c700: 61 66 66 69 6e 69 74 79 0a 61 70 70 6c 79 20 74  affinity.apply t
c710: 6f 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  o WITHOUT ROWID 
c720: 74 61 62 6c 65 73 20 74 68 65 20 73 61 6d 65 20  tables the same 
c730: 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20  as they do with 
c740: 72 6f 77 69 64 20 74 61 62 6c 65 73 2e 0a 0a 3c  rowid tables...<
c750: 68 33 3e 32 2e 35 20 52 65 70 72 65 73 65 6e 74  h3>2.5 Represent
c760: 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 49 6e 64  ation Of SQL Ind
c770: 69 63 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45  ices</h3>..<p>^E
c780: 61 63 68 20 53 51 4c 20 69 6e 64 65 78 2c 20 77  ach SQL index, w
c790: 68 65 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c  hether explicitl
c7a0: 79 20 64 65 63 6c 61 72 65 64 20 76 69 61 20 61  y declared via a
c7b0: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
c7c0: 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 69 6d 70  statement.or imp
c7d0: 6c 69 65 64 20 62 79 20 61 20 55 4e 49 51 55 45  lied by a UNIQUE
c7e0: 20 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20   or PRIMARY KEY 
c7f0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 63 6f 72 72  constraint, corr
c800: 65 73 70 6f 6e 64 73 20 74 6f 20 61 6e 20 0a 69  esponds to an .i
c810: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74  ndex b-tree in t
c820: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
c830: 2e 0a 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  ..^Each entry in
c840: 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65   the index b-tre
c850: 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e corresponds to
c860: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e   a single row in
c870: 20 74 68 65 20 0a 61 73 73 6f 63 69 61 74 65 64   the .associated
c880: 20 53 51 4c 20 74 61 62 6c 65 2e 0a 5e 54 68 65   SQL table..^The
c890: 20 6b 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78   key to an index
c8a0: 20 62 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63   b-tree is.a rec
c8b0: 6f 72 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ord composed of 
c8c0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  the columns that
c8d0: 20 61 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78   are being index
c8e0: 65 64 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  ed followed by t
c8f0: 68 65 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f  he.key of the co
c900: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
c910: 65 20 72 6f 77 2e 20 20 46 6f 72 20 6f 72 64 69  e row.  For ordi
c920: 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 74 68 65  nary tables, the
c930: 20 72 6f 77 20 6b 65 79 20 69 73 0a 74 68 65 20   row key is.the 
c940: 5b 72 6f 77 69 64 5d 2c 20 61 6e 64 20 66 6f 72  [rowid], and for
c950: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
c960: 20 74 61 62 6c 65 73 20 74 68 65 20 72 6f 77 20   tables the row 
c970: 6b 65 79 20 69 73 20 74 68 65 20 50 52 49 4d 41  key is the PRIMA
c980: 52 59 20 4b 45 59 2e 0a 42 65 63 61 75 73 65 20  RY KEY..Because 
c990: 65 76 65 72 79 20 72 6f 77 20 69 6e 20 74 68 65  every row in the
c9a0: 20 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69   table has a uni
c9b0: 71 75 65 20 72 6f 77 20 6b 65 79 2c 0a 61 6c 6c  que row key,.all
c9c0: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
c9d0: 78 20 61 72 65 20 75 6e 69 71 75 65 2e 3c 2f 70  x are unique.</p
c9e0: 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 6e 6f 72 6d  >..<p>^In a norm
c9f0: 61 6c 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20  al index, there 
ca00: 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20  is a one-to-one 
ca10: 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20  mapping between 
ca20: 72 6f 77 73 20 69 6e 20 61 20 0a 74 61 62 6c 65  rows in a .table
ca30: 20 61 6e 64 20 65 6e 74 72 69 65 73 20 69 6e 20   and entries in 
ca40: 65 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63  each index assoc
ca50: 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20  iated with that 
ca60: 74 61 62 6c 65 2e 0a 5e 48 6f 77 65 76 65 72 2c  table..^However,
ca70: 20 69 6e 20 61 20 5b 70 61 72 74 69 61 6c 20 69   in a [partial i
ca80: 6e 64 65 78 5d 2c 20 74 68 65 20 69 6e 64 65 78  ndex], the index
ca90: 20 62 2d 74 72 65 65 20 6f 6e 6c 79 20 63 6f 6e   b-tree only con
caa0: 74 61 69 6e 73 20 65 6e 74 72 69 65 73 0a 63 6f  tains entries.co
cab0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74  rresponding to t
cac0: 61 62 6c 65 20 72 6f 77 73 20 66 6f 72 20 77 68  able rows for wh
cad0: 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  ich the WHERE cl
cae0: 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ause expression 
caf0: 6f 6e 20 74 68 65 0a 43 52 45 41 54 45 20 49 4e  on the.CREATE IN
cb00: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73  DEX statement is
cb10: 20 74 72 75 65 2e 0a 5e 43 6f 72 72 65 73 70 6f   true..^Correspo
cb20: 6e 64 69 6e 67 20 72 6f 77 73 20 69 6e 20 74 68  nding rows in th
cb30: 65 20 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c  e index and tabl
cb40: 65 20 62 2d 74 72 65 65 73 20 73 68 61 72 65 20  e b-trees share 
cb50: 74 68 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 6f  the same rowid.o
cb60: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61  r primary key va
cb70: 6c 75 65 73 20 61 6e 64 20 63 6f 6e 74 61 69 6e  lues and contain
cb80: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
cb90: 66 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20  for all indexed 
cba0: 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68  columns.</p>..<h
cbb0: 34 3e 32 2e 35 2e 31 20 53 75 70 70 72 65 73 73  4>2.5.1 Suppress
cbc0: 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74  ion of redundant
cbd0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48   columns in WITH
cbe0: 4f 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64  OUT ROWID second
cbf0: 61 72 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68 34  ary indexed.</h4
cc00: 3e 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69 6e  >..<p> ^In an in
cc10: 64 65 78 20 6f 6e 20 61 20 57 49 54 48 4f 55 54  dex on a WITHOUT
cc20: 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 69 66   ROWID table, if
cc30: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20   one or more of 
cc40: 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
cc50: 68 65 20 74 61 62 6c 65 20 50 52 49 4d 41 52 59  he table PRIMARY
cc60: 20 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63 6f   KEY are also co
cc70: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e 64  lumns of the ind
cc80: 65 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e 64  ex, then the.ind
cc90: 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  exed column is n
cca0: 6f 74 20 72 65 70 65 61 74 65 64 20 69 6e 20 74  ot repeated in t
ccb0: 68 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75 66  he table-key suf
ccc0: 66 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20 6f  fix on the end o
ccd0: 66 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f  f.the index reco
cce0: 72 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78 61  rd.  ^(As an exa
ccf0: 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 74  mple, consider t
cd00: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c  he following SQL
cd10: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
cd20: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
cd30: 45 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c 65  E ex25(a,b,c,d,e
cd40: 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c 63  ,PRIMARY KEY(d,c
cd50: 2c 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f 77  ,a)) WITHOUT row
cd60: 69 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  id;.CREATE INDEX
cd70: 20 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35 28   ex25ce ON ex25(
cd80: 63 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e 44  c,e);.CREATE IND
cd90: 45 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20 65  EX ex25acde ON e
cda0: 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c 2f  x25(a,c,d,e);.</
cdb0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
cdc0: 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20 69  >..<p>Each row i
cdd0: 6e 20 74 68 65 20 65 78 32 35 63 65 20 69 6e 64  n the ex25ce ind
cde0: 65 78 20 69 73 20 61 20 72 65 63 6f 72 64 0a 77  ex is a record.w
cdf0: 69 74 68 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  ith these column
ce00: 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20 20  s: c, e, d, a.  
ce10: 54 68 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f  The first two co
ce20: 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63 6f  lumns are.the co
ce30: 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65  lumns being inde
ce40: 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20 54  xed, c and e.  T
ce50: 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c  he remaining col
ce60: 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72 69  umns are the pri
ce70: 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65 20  mary.key of the 
ce80: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
ce90: 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c  ble row.  Normal
cea0: 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79 20  ly, the primary 
ceb0: 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f 6c  key would be.col
cec0: 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20 61  umns d, c, and a
ced0: 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 63 6f  , but because co
cee0: 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20 61  lumn c already a
cef0: 70 70 65 61 72 73 20 65 61 72 6c 69 65 72 20 69  ppears earlier i
cf00: 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74 20  n the.index, it 
cf10: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
cf20: 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e 29  the key suffix.)
cf30: 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74  ^</p>..<p>^(In t
cf40: 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65 20  he extreme case 
cf50: 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e  where the column
cf60: 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  s being indexed 
cf70: 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  cover all column
cf80: 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  s.of the PRIMARY
cf90: 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20   KEY, the index 
cfa0: 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20  will consist of 
cfb0: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
cfc0: 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20   being.indexed. 
cfd0: 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65 78   The ex25acde ex
cfe0: 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f  ample above demo
cff0: 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 29 5e  nstrates this.)^
d000: 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e    ^Each entry in
d010: 0a 74 68 65 20 65 78 32 35 61 63 64 65 20 69 6e  .the ex25acde in
d020: 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  dex consists of 
d030: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
d040: 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c   a, c, d, and e,
d050: 20 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c   in that.order.<
d060: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73 75  /p>..<p> ^The su
d070: 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64  ppression of red
d080: 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69  undant columns i
d090: 6e 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78  n the key suffix
d0a0: 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e 74   of an index.ent
d0b0: 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20 69  ry only occurs i
d0c0: 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  n WITHOUT ROWID 
d0d0: 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e 20  tables.  ^In an 
d0e0: 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74  ordinary rowid t
d0f0: 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78 20  able,.the index 
d100: 65 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e 64  entry always end
d110: 73 20 77 69 74 68 20 74 68 65 20 72 6f 77 69 64  s with the rowid
d120: 20 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49 4e   even if the [IN
d130: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
d140: 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65  Y].column is one
d150: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
d160: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c 2f  being indexed.</
d170: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
d180: 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73 74  ment sqlite_mast
d190: 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  er {sqlite_maste
d1a0: 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  r} {sqlite_maste
d1b0: 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c  r table}</tcl>.<
d1c0: 68 33 3e 32 2e 36 20 53 74 6f 72 61 67 65 20 4f  h3>2.6 Storage O
d1d0: 66 20 54 68 65 20 53 51 4c 20 44 61 74 61 62 61  f The SQL Databa
d1e0: 73 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 0a  se Schema</h3>..
d1f0: 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61 20  <p>^Page 1 of a 
d200: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
d210: 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6f   the root page o
d220: 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  f a table b-tree
d230: 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73 70   that.holds a sp
d240: 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65  ecial table name
d250: 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  d "sqlite_master
d260: 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74 65  " (or "sqlite_te
d270: 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74 68  mp_master" in.th
d280: 65 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d 50  e case of a TEMP
d290: 20 64 61 74 61 62 61 73 65 29 20 77 68 69 63 68   database) which
d2a0: 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d 70   stores the comp
d2b0: 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20 73 63  lete.database sc
d2c0: 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74 72  hema.  ^(The str
d2d0: 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73 71  ucture of the sq
d2e0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
d2f0: 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68 61  e is as.if it ha
d300: 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 75  d been created u
d310: 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69  sing the followi
d320: 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c  ng SQL:</p>..<bl
d330: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
d340: 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
d350: 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79 70  te_master(.  typ
d360: 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74  e text,.  name t
d370: 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20  ext,.  tbl_name 
d380: 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65  text,.  rootpage
d390: 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c 20   integer,.  sql 
d3a0: 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  text.);.</pre></
d3b0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
d3c0: 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  p>^The sqlite_ma
d3d0: 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61  ster table conta
d3e0: 69 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20  ins one row for 
d3f0: 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64 65  each table, inde
d400: 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72 69  x, view,.and tri
d410: 67 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76 65  gger (collective
d420: 6c 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69 6e  ly "objects") in
d430: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
d440: 68 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68 65  hema, except the
d450: 72 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20 66  re.is no entry f
d460: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  or the sqlite_ma
d470: 73 74 65 72 20 74 61 62 6c 65 20 69 74 73 65 6c  ster table itsel
d480: 66 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  f.  ^The sqlite_
d490: 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e  master table.con
d4a0: 74 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66 6f  tains entries fo
d4b0: 72 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  r [internal sche
d4c0: 6d 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61  ma objects] in a
d4d0: 64 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69  ddition to appli
d4e0: 63 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67  cation-.and prog
d4f0: 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f  rammer-defined o
d500: 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54  bjects....<p>^(T
d510: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
d520: 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c  .type column wil
d530: 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20  l be one.of the 
d540: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20 73  following text s
d550: 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65 27  trings:  'table'
d560: 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65 77  , 'index', 'view
d570: 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27 0a  ', or 'trigger'.
d580: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
d590: 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20   type of object 
d5a0: 64 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27 74  defined.  The 't
d5b0: 61 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73 20  able' string is 
d5c0: 75 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72  used.for both or
d5d0: 64 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72 74  dinary and [virt
d5e0: 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f  ual tables].)^</
d5f0: 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65 20 73 71  p>..</p>^(The sq
d600: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
d610: 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c   column will hol
d620: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
d630: 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55  e object.)^.^([U
d640: 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d  NIQUE] and [PRIM
d650: 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
d660: 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65 73 20 63  ints on tables c
d670: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 63  ause SQLite to c
d680: 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c 20  reate.[internal 
d690: 69 6e 64 65 78 65 73 5d 20 77 69 74 68 20 6e 61  indexes] with na
d6a0: 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  mes of the form 
d6b0: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
d6c0: 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72 65  x_TABLE_N".where
d6d0: 20 54 41 42 4c 45 20 69 73 20 72 65 70 6c 61 63   TABLE is replac
d6e0: 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed by the name o
d6f0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
d700: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63 6f   contains the.co
d710: 6e 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20 69  nstraint and N i
d720: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 67  s an integer beg
d730: 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 20 61 6e  inning with 1 an
d740: 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79 20  d increasing by 
d750: 6f 6e 65 0a 77 69 74 68 20 65 61 63 68 20 63 6f  one.with each co
d760: 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 20 69 6e  nstraint seen in
d770: 20 74 68 65 20 74 61 62 6c 65 20 64 65 66 69 6e   the table defin
d780: 69 74 69 6f 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20  ition.)^.^(In a 
d790: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
d7a0: 74 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20  table, there is 
d7b0: 6e 6f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  no sqlite_master
d7c0: 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65 0a 50   entry for the.P
d7d0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 75 74 20  RIMARY KEY, but 
d7e0: 74 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f  the "sqlite_auto
d7f0: 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e  index_TABLE_N" n
d800: 61 6d 65 20 69 73 20 73 65 74 20 61 73 69 64 65  ame is set aside
d810: 0a 66 6f 72 20 74 68 65 20 50 52 49 4d 41 52 59  .for the PRIMARY
d820: 20 4b 45 59 20 61 73 20 69 66 20 74 68 65 20 73   KEY as if the s
d830: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74  qlite_master ent
d840: 72 79 20 64 69 64 20 65 78 69 73 74 2e 20 20 54  ry did exist.  T
d850: 68 69 73 0a 77 69 6c 6c 20 61 66 66 65 63 74 20  his.will affect 
d860: 74 68 65 20 6e 75 6d 62 65 72 69 6e 67 20 6f 66  the numbering of
d870: 20 73 75 62 73 65 71 75 65 6e 74 20 55 4e 49 51   subsequent UNIQ
d880: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29  UE constraints.)
d890: 5e 0a 5e 54 68 65 20 22 73 71 6c 69 74 65 5f 61  ^.^The "sqlite_a
d8a0: 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e  utoindex_TABLE_N
d8b0: 22 20 6e 61 6d 65 20 69 73 20 6e 65 76 65 72 20  " name is never 
d8c0: 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 6e  allocated for an
d8d0: 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  .[INTEGER PRIMAR
d8e0: 59 20 4b 45 59 5d 2c 20 65 69 74 68 65 72 20 69  Y KEY], either i
d8f0: 6e 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 6f  n rowid tables o
d900: 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  r WITHOUT ROWID 
d910: 74 61 62 6c 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  tables..</p>..<p
d920: 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  >The sqlite_mast
d930: 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75  er.tbl_name colu
d940: 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  mn holds the nam
d950: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20  e of a table or 
d960: 76 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f 62  view.that the ob
d970: 6a 65 63 74 20 69 73 20 61 73 73 6f 63 69 61 74  ject is associat
d980: 65 64 20 77 69 74 68 2e 20 20 5e 46 6f 72 20 61  ed with.  ^For a
d990: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c 20   table or view, 
d9a0: 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  the.tbl_name col
d9b0: 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66  umn is a copy of
d9c0: 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e   the name column
d9d0: 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65 78  .  ^For an index
d9e0: 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69  , the tbl_name.i
d9f0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
da00: 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
da10: 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f 72 20 61  indexed.  ^For a
da20: 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 74 62   trigger, the tb
da30: 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74  l_name.column st
da40: 6f 72 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ores the name of
da50: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
da60: 65 77 20 74 68 61 74 20 63 61 75 73 65 73 20 74  ew that causes t
da70: 68 65 20 74 72 69 67 67 65 72 20 0a 74 6f 20 66  he trigger .to f
da80: 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  ire.</p>..<p>^(T
da90: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
daa0: 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e  .rootpage column
dab0: 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67 65   stores the page
dac0: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72   number of the r
dad0: 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65 20  oot.b-tree page 
dae0: 66 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  for tables and i
daf0: 6e 64 65 78 65 73 2e 29 5e 20 20 5e 46 6f 72 20  ndexes.)^  ^For 
db00: 72 6f 77 73 20 74 68 61 74 20 64 65 66 69 6e 65  rows that define
db10: 20 76 69 65 77 73 2c 20 74 72 69 67 67 65 72 73   views, triggers
db20: 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c 20 74 61  ,.and virtual ta
db30: 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74 70 61  bles, the rootpa
db40: 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f  ge column is 0 o
db50: 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e  r NULL.</p>..<p>
db60: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
db70: 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73  ter.sql column s
db80: 74 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20 74  tores SQL text t
db90: 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
dba0: 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  e.object.  This 
dbb0: 53 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b 43  SQL text is a [C
dbc0: 52 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43  REATE TABLE], [C
dbd0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
dbe0: 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e  BLE],.[CREATE IN
dbf0: 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49  DEX],.[CREATE VI
dc00: 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45 20  EW], or [CREATE 
dc10: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
dc20: 6e 74 20 74 68 61 74 20 69 66 20 65 76 61 6c 75  nt that if evalu
dc30: 61 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68 65  ated against.the
dc40: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
dc50: 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d 61  hen it is the ma
dc60: 69 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20 61  in database of a
dc70: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
dc80: 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63  ction].would rec
dc90: 72 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74  reate 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 0a 20 20 20 20 20 20 20 75  a table.       u
e4e0: 73 69 6e 67 20 5b 41 55 54 4f 49 4e 43 52 45 4d  sing [AUTOINCREM
e4f0: 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 61  ENT]...<li><p>Ta
e500: 62 6c 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20  bles with names 
e510: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c  of the form "sql
e520: 69 74 65 5f 73 74 61 74 4e 22 20 77 68 65 72 65  ite_statN" where
e530: 20 4e 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   N is an integer
e540: 2e 0a 20 20 20 20 20 20 20 53 75 63 68 20 74 61  ..       Such ta
e550: 62 6c 65 73 20 73 74 6f 72 65 20 64 61 74 61 62  bles store datab
e560: 61 73 65 20 73 74 61 74 69 73 74 69 63 73 20 67  ase statistics g
e570: 61 74 68 65 72 65 64 20 62 79 20 74 68 65 20 5b  athered by the [
e580: 41 4e 41 4c 59 5a 45 5d 0a 20 20 20 20 20 20 20  ANALYZE].       
e590: 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 75 73 65 64  command and used
e5a0: 20 62 79 20 74 68 65 20 71 75 65 72 79 20 70 6c   by the query pl
e5b0: 61 6e 6e 65 72 20 74 6f 20 68 65 6c 70 20 64 65  anner to help de
e5c0: 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74  termine the best
e5d0: 0a 20 20 20 20 20 20 20 61 6c 67 6f 72 69 74 68  .       algorith
e5e0: 6d 20 74 6f 20 75 73 65 20 66 6f 72 20 65 61 63  m to use for eac
e5f0: 68 20 71 75 65 72 79 2e 0a 3c 2f 75 6c 3e 0a 0a  h query..</ul>..
e600: 3c 70 3e 4e 65 77 20 69 6e 74 65 72 6e 61 6c 20  <p>New internal 
e610: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 6e  schema objects n
e620: 61 6d 65 73 2c 20 61 6c 77 61 79 73 20 62 65 67  ames, always beg
e630: 69 6e 6e 69 6e 67 20 77 69 74 68 20 22 73 71 6c  inning with "sql
e640: 69 74 65 5f 22 2c 0a 6d 61 79 20 62 65 20 61 64  ite_",.may be ad
e650: 64 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74  ded to the SQLit
e660: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e  e file format in
e670: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 73   future releases
e680: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
e690: 65 6e 74 20 73 65 71 74 61 62 20 7b 73 71 6c 69  ent seqtab {sqli
e6a0: 74 65 5f 73 65 71 75 65 6e 63 65 7d 3c 2f 74 63  te_sequence}</tc
e6b0: 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 32 20 54 68 65  l>.<h4>2.6.2 The
e6c0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
e6d0: 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e   table</h4>..<p>
e6e0: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
e6f0: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e  ence table is an
e700: 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20   internal table 
e710: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
e720: 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52  lement.[AUTOINCR
e730: 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71  EMENT].  ^The sq
e740: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
e750: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 61  ble is created a
e760: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65  utomatically.whe
e770: 6e 65 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61  never any ordina
e780: 72 79 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e  ry table with an
e790: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69   AUTOINCREMENT i
e7a0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
e7b0: 65 79 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  ey is created.  
e7c0: 5e 4f 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74  ^Once created, t
e7d0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e7e0: 63 65 20 74 61 62 6c 65 20 65 78 69 73 74 73 20  ce table exists 
e7f0: 69 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61  in the.sqlite_ma
e800: 73 74 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76  ster table forev
e810: 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  er; it cannot be
e820: 20 64 72 6f 70 70 65 64 2e 0a 5e 28 54 68 65 20   dropped..^(The 
e830: 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 73  schema for the s
e840: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
e850: 61 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  able is:..<block
e860: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
e870: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
e880: 73 65 71 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65  sequence(name,se
e890: 71 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  q);.</pre></bloc
e8a0: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54  kquote>)^..<p>^T
e8b0: 68 65 72 65 20 69 73 20 61 20 73 69 6e 67 6c 65  here is a single
e8c0: 20 72 6f 77 20 69 6e 20 74 68 65 20 73 71 6c 69   row in the sqli
e8d0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
e8e0: 65 20 66 6f 72 20 65 61 63 68 20 6f 72 64 69 6e  e for each ordin
e8f0: 61 72 79 0a 74 61 62 6c 65 20 74 68 61 74 20 75  ary.table that u
e900: 73 65 73 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ses AUTOINCREMEN
e910: 54 2e 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  T.  ^(The name o
e920: 66 20 74 68 65 20 74 61 62 6c 65 20 28 61 73 20  f the table (as 
e930: 69 74 20 61 70 70 65 61 72 73 20 69 6e 0a 73 71  it appears in.sq
e940: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
e950: 29 20 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69  ) is in the sqli
e960: 74 65 5f 73 65 71 75 65 6e 63 65 2e 6d 61 69 6e  te_sequence.main
e970: 20 66 69 65 6c 64 20 61 6e 64 20 74 68 65 20 6c   field and the l
e980: 61 72 67 65 73 74 0a 5b 49 4e 54 45 47 45 52 20  argest.[INTEGER 
e990: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 65 76 65  PRIMARY KEY] eve
e9a0: 72 20 75 73 65 64 20 62 79 20 74 68 61 74 20 74  r used by that t
e9b0: 61 62 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73  able is in the s
e9c0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
e9d0: 65 71 0a 66 69 65 6c 64 2e 29 5e 20 20 5e 4e 65  eq.field.)^  ^Ne
e9e0: 77 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  w automatically 
e9f0: 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65  generated intege
ea00: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 66  r primary keys f
ea10: 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
ea20: 0a 74 61 62 6c 65 73 20 61 72 65 20 67 75 61 72  .tables are guar
ea30: 61 6e 74 65 65 64 20 74 6f 20 62 65 20 6c 61 72  anteed to be lar
ea40: 67 65 72 20 74 68 61 6e 20 74 68 65 20 73 71 6c  ger than the sql
ea50: 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71  ite_sequence.seq
ea60: 20 66 69 65 6c 64 20 66 6f 72 0a 74 68 61 74 20   field for.that 
ea70: 74 61 62 6c 65 2e 0a 5e 28 49 66 20 74 68 65 20  table..^(If the 
ea80: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
ea90: 73 65 71 20 66 69 65 6c 64 20 6f 66 20 61 6e 20  seq field of an 
eaa0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
eab0: 62 6c 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ble is already a
eac0: 74 0a 74 68 65 20 6c 61 72 67 65 73 74 20 69 6e  t.the largest in
ead0: 74 65 67 65 72 20 76 61 6c 75 65 20 28 39 32 32  teger value (922
eae0: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
eaf0: 29 20 74 68 65 6e 20 61 74 74 65 6d 70 74 73 20  ) then attempts 
eb00: 74 6f 20 61 64 64 20 6e 65 77 0a 72 6f 77 73 20  to add new.rows 
eb10: 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 77 69  to that table wi
eb20: 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 61  th an automatica
eb30: 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e  lly generated in
eb40: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 77 69  teger primary wi
eb50: 6c 6c 20 66 61 69 6c 0a 77 69 74 68 20 61 6e 20  ll fail.with an 
eb60: 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72  [SQLITE_FULL] er
eb70: 72 6f 72 2e 29 5e 0a 5e 54 68 65 20 73 71 6c 69  ror.)^.^The sqli
eb80: 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20  te_sequence.seq 
eb90: 66 69 65 6c 64 20 69 73 20 61 75 74 6f 6d 61 74  field is automat
eba0: 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64 20 69  ically updated i
ebb0: 66 20 72 65 71 75 69 72 65 64 20 77 68 65 6e 0a  f required when.
ebc0: 6e 65 77 20 65 6e 74 72 69 65 73 20 61 72 65 20  new entries are 
ebd0: 61 64 64 65 64 20 74 6f 20 61 6e 20 41 55 54 4f  added to an AUTO
ebe0: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
ebf0: 20 20 0a 5e 54 68 65 20 73 71 6c 69 74 65 5f 73    .^The sqlite_s
ec00: 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72 20  equence row for 
ec10: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
ec20: 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f 6d 61   table is automa
ec30: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a  tically deleted.
ec40: 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  when the table i
ec50: 73 20 64 72 6f 70 70 65 64 2e 0a 5e 49 66 20 74  s dropped..^If t
ec60: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ec70: 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55  ce row for an AU
ec80: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
ec90: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
eca0: 20 77 68 65 6e 0a 74 68 65 20 41 55 54 4f 49 4e   when.the AUTOIN
ecb0: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73  CREMENT table is
ecc0: 20 75 70 64 61 74 65 64 2c 20 74 68 65 6e 20 61   updated, then a
ecd0: 20 6e 65 77 20 73 71 6c 69 74 65 5f 73 65 71 75   new sqlite_sequ
ece0: 65 6e 63 65 20 72 6f 77 20 69 73 20 63 72 65 61  ence row is crea
ecf0: 74 65 64 2e 0a 5e 28 49 66 20 74 68 65 20 73 71  ted..^(If the sq
ed00: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65  lite_sequence.se
ed10: 71 20 76 61 6c 75 65 20 66 6f 72 20 61 6e 20 41  q value for an A
ed20: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
ed30: 6c 65 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 0a  le is manually .
ed40: 73 65 74 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67  set to something
ed50: 20 6f 74 68 65 72 20 74 68 61 6e 20 61 6e 20 69   other than an i
ed60: 6e 74 65 67 65 72 20 61 6e 64 20 74 68 65 72 65  nteger and there
ed70: 20 69 73 20 61 20 73 75 62 73 65 71 75 65 6e 74   is a subsequent
ed80: 20 61 74 74 65 6d 70 74 20 74 6f 0a 69 6e 73 65   attempt to.inse
ed90: 72 74 20 74 68 65 20 6f 72 20 75 70 64 61 74 65  rt the or update
eda0: 20 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45   the AUTOINCREME
edb0: 4e 54 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74  NT table, then t
edc0: 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
edd0: 6e 64 65 66 69 6e 65 64 2e 29 5e 0a 0a 3c 70 3e  ndefined.)^..<p>
ede0: 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64  ^Application cod
edf0: 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e is allowed to 
ee00: 6d 6f 64 69 66 79 20 74 68 65 20 73 71 6c 69 74  modify the sqlit
ee10: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
ee20: 2c 20 74 6f 20 61 64 64 0a 6e 65 77 20 72 6f 77  , to add.new row
ee30: 73 2c 20 74 6f 20 64 65 6c 65 74 65 20 72 6f 77  s, to delete row
ee40: 73 2c 20 6f 72 20 74 6f 20 6d 6f 64 69 66 79 20  s, or to modify 
ee50: 65 78 69 73 74 69 6e 67 20 72 6f 77 73 2e 20 20  existing rows.  
ee60: 5e 48 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63  ^However, applic
ee70: 61 74 69 6f 6e 0a 63 6f 64 65 20 63 61 6e 6e 6f  ation.code canno
ee80: 74 20 63 72 65 61 74 65 20 74 68 65 20 73 71 6c  t create the sql
ee90: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
eea0: 6c 65 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f  le if it does no
eeb0: 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 2e  t already exist.
eec0: 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f  .^Application co
eed0: 64 65 20 63 61 6e 20 64 65 6c 65 74 65 20 61 6c  de can delete al
eee0: 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
eef0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ef00: 63 65 20 74 61 62 6c 65 2c 0a 62 75 74 20 61 70  ce table,.but ap
ef10: 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 63  plication code c
ef20: 61 6e 6e 6f 74 20 64 72 6f 70 20 74 68 65 20 73  annot drop the s
ef30: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
ef40: 61 62 6c 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  able...<tcl>hd_f
ef50: 72 61 67 6d 65 6e 74 20 73 74 61 74 31 74 61 62  ragment stat1tab
ef60: 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31 7d 20   {sqlite_stat1} 
ef70: 53 51 4c 49 54 45 5f 53 54 41 54 31 20 3c 2f 74  SQLITE_STAT1 </t
ef80: 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 33 20 54 68  cl>.<h4>2.6.3 Th
ef90: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
efa0: 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  able</h4>..<p>^T
efb0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
efc0: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 74  is an internal t
efd0: 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
efe0: 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f  the [ANALYZE] co
eff0: 6d 6d 61 6e 64 0a 61 6e 64 20 75 73 65 64 20 74  mmand.and used t
f000: 6f 20 68 6f 6c 64 20 73 75 70 70 6c 65 6d 65 6e  o hold supplemen
f010: 74 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  tal information 
f020: 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64  about tables and
f030: 20 69 6e 64 65 78 65 73 20 74 68 61 74 20 74 68   indexes that th
f040: 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e.query planner 
f050: 63 61 6e 20 75 73 65 20 74 6f 20 68 65 6c 70 20  can use to help 
f060: 69 74 20 66 69 6e 64 20 62 65 74 74 65 72 20 77  it find better w
f070: 61 79 73 20 6f 66 20 70 65 72 66 6f 72 6d 69 6e  ays of performin
f080: 67 20 71 75 65 72 69 65 73 2e 0a 5e 41 70 70 6c  g queries..^Appl
f090: 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 75 70 64  ications can upd
f0a0: 61 74 65 2c 20 64 65 6c 65 74 65 20 66 72 6f 6d  ate, delete from
f0b0: 2c 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 6f 72  , insert into or
f0c0: 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65   drop the sqlite
f0d0: 5f 73 74 61 74 31 0a 74 61 62 6c 65 2c 20 62 75  _stat1.table, bu
f0e0: 74 20 6d 61 79 20 6e 6f 74 20 63 72 65 61 74 65  t may not create
f0f0: 20 6f 72 20 61 6c 74 65 72 20 74 68 65 20 73 71   or alter the sq
f100: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
f110: 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20 6f  ..^(The schema o
f120: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
f130: 74 31 20 74 61 62 6c 65 20 69 73 20 61 73 20 66  t1 table is as f
f140: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
f150: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
f160: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
f170: 74 61 74 31 28 74 62 6c 2c 69 64 78 2c 73 74 61  tat1(tbl,idx,sta
f180: 74 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  t);.</pre></bloc
f190: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 20 5e  kquote>)^..<p> ^
f1a0: 28 54 68 65 72 65 20 69 73 20 6e 6f 72 6d 61 6c  (There is normal
f1b0: 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65 72 20 69  ly one row per i
f1c0: 6e 64 65 78 2c 20 77 69 74 68 20 74 68 65 20 69  ndex, with the i
f1d0: 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
f1e0: 62 79 20 74 68 65 0a 6e 61 6d 65 20 69 6e 20 74  by the.name in t
f1f0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
f200: 69 64 78 20 63 6f 6c 75 6d 6e 2e 29 5e 20 20 5e  idx column.)^  ^
f210: 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
f220: 31 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a  1.tbl column is.
f230: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
f240: 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
f250: 68 65 20 69 6e 64 65 78 20 62 65 6c 6f 6e 67 73  he index belongs
f260: 2e 29 5e 20 20 5e 28 49 6e 20 65 61 63 68 20 73  .)^  ^(In each s
f270: 75 63 68 20 72 6f 77 2c 20 0a 74 68 65 20 73 71  uch row, .the sq
f280: 6c 69 74 65 5f 73 74 61 74 2e 73 74 61 74 20 63  lite_stat.stat c
f290: 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 0a 61 20  olumn will be.a 
f2a0: 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e  string consistin
f2b0: 67 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 69  g of a list of i
f2c0: 6e 74 65 67 65 72 73 20 66 6f 6c 6c 6f 77 65 64  ntegers followed
f2d0: 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
f2e0: 20 0a 61 72 67 75 6d 65 6e 74 73 2e 29 5e 20 20   .arguments.)^  
f2f0: 5e 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67  ^The first integ
f300: 65 72 20 69 6e 20 74 68 69 73 0a 6c 69 73 74 20  er in this.list 
f310: 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
f320: 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  te number of row
f330: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 61  s in the index a
f340: 6e 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  nd in the table.
f350: 0a 5e 54 68 65 20 73 65 63 6f 6e 64 20 69 6e 74  .^The second int
f360: 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70 72  eger is the appr
f370: 6f 78 69 6d 61 74 65 20 61 76 65 72 61 67 65 20  oximate average 
f380: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
f390: 6e 20 74 68 65 20 69 6e 64 65 78 0a 74 68 61 74  n the index.that
f3a0: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
f3b0: 61 6c 75 65 20 69 6e 20 74 68 65 20 66 69 72 73  alue in the firs
f3c0: 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
f3d0: 69 6e 64 65 78 2e 20 20 5e 54 68 65 20 74 68 69  index.  ^The thi
f3e0: 72 64 20 0a 69 6e 74 65 67 65 72 20 69 73 20 74  rd .integer is t
f3f0: 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 61  he approximate a
f400: 76 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  verage number of
f410: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
f420: 65 78 20 74 68 61 74 20 68 61 76 65 20 0a 74 68  ex that have .th
f430: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
f440: 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20 63   the first two c
f450: 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65 20 4e 2d  olumns.  ^The N-
f460: 74 68 20 69 6e 74 65 67 65 72 20 28 66 6f 72 20  th integer (for 
f470: 4e 3e 31 29 20 0a 69 73 20 74 68 65 20 61 70 70  N>1) .is the app
f480: 72 6f 78 69 6d 61 74 65 20 61 76 65 72 61 67 65  roximate average
f490: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
f4a0: 69 6e 20 0a 74 68 65 20 69 6e 64 65 78 20 77 68  in .the index wh
f4b0: 69 63 68 20 68 61 76 65 20 74 68 65 20 73 61 6d  ich have the sam
f4c0: 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
f4d0: 66 69 72 73 74 20 4e 2d 31 20 63 6f 6c 75 6d 6e  first N-1 column
f4e0: 73 2e 20 20 5e 46 6f 72 0a 61 20 4b 2d 63 6f 6c  s.  ^For.a K-col
f4f0: 75 6d 6e 20 69 6e 64 65 78 2c 20 74 68 65 72 65  umn index, there
f500: 20 77 69 6c 6c 20 62 65 20 4b 2b 31 20 69 6e 74   will be K+1 int
f510: 65 67 65 72 73 20 69 6e 20 74 68 65 20 73 74 61  egers in the sta
f520: 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 49 66 0a 74  t column.  ^If.t
f530: 68 65 20 69 6e 64 65 78 20 69 73 20 75 6e 69 71  he index is uniq
f540: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 61 73  ue, then the las
f550: 74 20 69 6e 74 65 67 65 72 20 77 69 6c 6c 20 62  t integer will b
f560: 65 20 31 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 69  e 1...<p>^The li
f570: 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  st of integers i
f580: 6e 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d  n the stat colum
f590: 6e 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79  n can optionally
f5a0: 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20   be followed.by 
f5b0: 61 72 67 75 6d 65 6e 74 73 2c 20 65 61 63 68 20  arguments, each 
f5c0: 6f 66 20 77 68 69 63 68 20 69 73 20 61 20 73 65  of which is a se
f5d0: 71 75 65 6e 63 65 20 6f 66 20 6e 6f 6e 2d 73 70  quence of non-sp
f5e0: 61 63 65 20 63 68 61 72 61 63 74 65 72 73 2e 0a  ace characters..
f5f0: 5e 41 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61  ^All arguments a
f600: 72 65 20 70 72 65 63 65 64 65 64 20 62 79 20 61  re preceded by a
f610: 20 73 69 6e 67 6c 65 20 73 70 61 63 65 2e 0a 5e   single space..^
f620: 55 6e 72 65 63 6f 67 6e 69 7a 65 64 20 61 72 67  Unrecognized arg
f630: 75 6d 65 6e 74 73 20 61 72 65 20 73 69 6c 65 6e  uments are silen
f640: 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 70  tly ignored...<p
f650: 3e 5e 49 66 20 74 68 65 20 22 75 6e 6f 72 64 65  >^If the "unorde
f660: 72 65 64 22 20 61 72 67 75 6d 65 6e 74 20 69 73  red" argument is
f670: 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
f680: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
f690: 20 61 73 73 75 6d 65 73 0a 74 68 61 74 20 74 68   assumes.that th
f6a0: 65 20 69 6e 64 65 78 20 69 73 20 75 6e 6f 72 64  e index is unord
f6b0: 65 72 65 64 20 61 6e 64 20 77 69 6c 6c 20 6e 6f  ered and will no
f6c0: 74 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20  t use the index 
f6d0: 66 6f 72 20 61 20 72 61 6e 67 65 20 71 75 65 72  for a range quer
f6e0: 79 0a 6f 72 20 66 6f 72 20 73 6f 72 74 69 6e 67  y.or for sorting
f6f0: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 7a 3d 4e  ...<p>^The "sz=N
f700: 4e 4e 22 20 61 72 67 75 6d 65 6e 74 20 28 77 68  NN" argument (wh
f710: 65 72 65 20 4e 4e 4e 20 72 65 70 72 65 73 65 6e  ere NNN represen
f720: 74 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  ts a sequence of
f730: 20 31 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74   1 or more digit
f740: 73 29 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68  s).means that th
f750: 65 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  e average row si
f760: 7a 65 20 6f 76 65 72 20 61 6c 6c 20 72 65 63 6f  ze over all reco
f770: 72 64 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  rds of the table
f780: 20 6f 72 0a 69 6e 64 65 78 20 69 73 20 4e 4e 4e   or.index is NNN
f790: 20 62 79 74 65 73 20 70 65 72 20 72 6f 77 2e 20   bytes per row. 
f7a0: 20 5e 54 68 65 20 53 51 4c 69 74 65 20 71 75 65   ^The SQLite que
f7b0: 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69 67 68 74  ry planner might
f7c0: 20 75 73 65 20 74 68 65 0a 65 73 74 69 6d 61 74   use the.estimat
f7d0: 65 64 20 72 6f 77 20 73 69 7a 65 20 69 6e 66 6f  ed row size info
f7e0: 72 6d 61 74 69 6f 6e 20 70 72 6f 76 69 64 65 64  rmation provided
f7f0: 20 62 79 20 74 68 65 20 22 73 7a 3d 4e 4e 4e 22   by the "sz=NNN"
f800: 20 74 6f 6b 65 6e 0a 74 6f 20 68 65 6c 70 20 69   token.to help i
f810: 74 20 63 68 6f 6f 73 65 20 73 6d 61 6c 6c 65 72  t choose smaller
f820: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65   tables and inde
f830: 78 65 73 20 74 68 61 74 20 72 65 71 75 69 72 65  xes that require
f840: 20 6c 65 73 73 20 64 69 73 6b 20 49 2f 4f 2e 0a   less disk I/O..
f850: 0a 3c 70 3e 5e 28 54 68 65 20 70 72 65 73 65 6e  .<p>^(The presen
f860: 63 65 20 6f 66 20 74 68 65 20 22 6e 6f 73 6b 69  ce of the "noski
f870: 70 73 63 61 6e 22 20 74 6f 6b 65 6e 20 6f 6e 20  pscan" token on 
f880: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
f890: 2e 73 74 61 74 20 66 69 65 6c 64 0a 6f 66 20 61  .stat field.of a
f8a0: 6e 20 69 6e 64 65 78 20 70 72 65 76 65 6e 74 73  n index prevents
f8b0: 20 74 68 61 74 20 69 6e 64 65 78 20 66 72 6f 6d   that index from
f8c0: 20 62 65 69 6e 67 20 75 73 65 64 20 77 69 74 68   being used with
f8d0: 20 74 68 65 0a 5b 73 6b 69 70 2d 73 63 61 6e 20   the.[skip-scan 
f8e0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5d 2e 29 5e  optimization].)^
f8f0: 0a 0a 3c 70 3e 4e 65 77 20 74 65 78 74 20 74 6f  ..<p>New text to
f900: 6b 65 6e 73 20 6d 61 79 20 62 65 20 61 64 64 65  kens may be adde
f910: 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  d to the end of 
f920: 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20  the stat column 
f930: 69 6e 20 66 75 74 75 72 65 0a 65 6e 68 61 6e 63  in future.enhanc
f940: 65 6d 65 6e 74 73 20 74 6f 20 53 51 4c 69 74 65  ements to SQLite
f950: 2e 20 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  .  For compatibi
f960: 6c 69 74 79 2c 20 75 6e 72 65 63 6f 67 6e 69 7a  lity, unrecogniz
f970: 65 64 20 74 6f 6b 65 6e 73 20 61 74 20 74 68 65  ed tokens at the
f980: 20 65 6e 64 0a 6f 66 20 74 68 65 20 73 74 61 74   end.of the stat
f990: 20 63 6f 6c 75 6d 6e 20 61 72 65 20 73 69 6c 65   column are sile
f9a0: 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c  ntly ignored...<
f9b0: 70 3e 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74  p>^(If the sqlit
f9c0: 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75  e_stat1.idx colu
f9d0: 6d 6e 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  mn is NULL, then
f9e0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
f9f0: 31 2e 73 74 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f  1.stat.column co
fa00: 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20  ntains a single 
fa10: 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
fa20: 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
fa30: 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20   number of.rows 
fa40: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 64 65  in the table ide
fa50: 6e 74 69 66 69 65 64 20 62 79 20 73 71 6c 69 74  ntified by sqlit
fa60: 65 5f 73 74 61 74 31 2e 74 62 6c 2e 29 5e 0a 0a  e_stat1.tbl.)^..
fa70: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
fa80: 20 73 74 61 74 32 74 61 62 20 7b 73 71 6c 69 74   stat2tab {sqlit
fa90: 65 5f 73 74 61 74 32 7d 3c 2f 74 63 6c 3e 0a 3c  e_stat2}</tcl>.<
faa0: 68 34 3e 32 2e 36 2e 34 20 54 68 65 20 73 71 6c  h4>2.6.4 The sql
fab0: 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 3c  ite_stat2 table<
fac0: 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  /h4>..<p>The sql
fad0: 69 74 65 5f 73 74 61 74 32 20 69 73 20 6f 6e 6c  ite_stat2 is onl
fae0: 79 20 63 72 65 61 74 65 64 20 61 6e 64 20 69 73  y created and is
faf0: 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51   only used if SQ
fb00: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
fb10: 0a 77 69 74 68 20 53 51 4c 49 54 45 5f 45 4e 41  .with SQLITE_ENA
fb20: 42 4c 45 5f 53 54 41 54 32 20 61 6e 64 20 69 66  BLE_STAT2 and if
fb30: 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73   the SQLite vers
fb40: 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 62 65  ion number is be
fb50: 74 77 65 65 6e 0a 33 2e 36 2e 31 38 20 61 6e 64  tween.3.6.18 and
fb60: 20 33 2e 37 2e 38 2e 20 20 54 68 65 20 73 71 6c   3.7.8.  The sql
fb70: 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20  ite_stat2 table 
fb80: 69 73 20 6e 65 69 74 68 65 72 20 72 65 61 64 20  is neither read 
fb90: 6e 6f 72 20 77 72 69 74 74 65 6e 20 62 79 20 61  nor written by a
fba0: 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51  ny.version of SQ
fbb0: 4c 69 74 65 20 62 65 66 6f 72 65 20 33 2e 36 2e  Lite before 3.6.
fbc0: 31 38 20 6e 6f 72 20 61 66 74 65 72 20 33 2e 37  18 nor after 3.7
fbd0: 2e 38 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73  .8..The sqlite_s
fbe0: 74 61 74 32 20 74 61 62 6c 65 20 63 6f 6e 74 61  tat2 table conta
fbf0: 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  ins additional i
fc00: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74  nformation.about
fc10: 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f   the distributio
fc20: 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e  n of keys within
fc30: 20 61 6e 20 69 6e 64 65 78 2e 0a 54 68 65 20 73   an index..The s
fc40: 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
fc50: 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20  ite_stat2 table 
fc60: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
fc70: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
fc80: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
fc90: 71 6c 69 74 65 5f 73 74 61 74 32 28 74 62 6c 2c  qlite_stat2(tbl,
fca0: 69 64 78 2c 73 61 6d 70 6c 65 6e 6f 2c 73 61 6d  idx,sampleno,sam
fcb0: 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  ple);.</pre></bl
fcc0: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
fcd0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 69  e sqlite_stat2.i
fce0: 64 78 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68  dx column and th
fcf0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 74  e sqlite_stat2.t
fd00: 62 6c 20 63 6f 6c 75 6d 6e 20 69 6e 20 65 61 63  bl column in eac
fd10: 68 20 0a 72 6f 77 20 6f 66 20 74 68 65 20 73 71  h .row of the sq
fd20: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
fd30: 20 69 64 65 6e 74 69 66 79 20 61 6e 20 69 6e 64   identify an ind
fd40: 65 78 20 64 65 73 63 72 69 62 65 64 20 62 79 20  ex described by 
fd50: 74 68 61 74 20 72 6f 77 2e 0a 54 68 65 72 65 20  that row..There 
fd60: 61 72 65 20 75 73 75 61 6c 6c 79 20 31 30 20 72  are usually 10 r
fd70: 6f 77 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74  ows in the sqlit
fd80: 65 5f 73 74 61 74 32 0a 74 61 62 6c 65 20 66 6f  e_stat2.table fo
fd90: 72 20 65 61 63 68 20 69 6e 64 65 78 2e 0a 0a 3c  r each index...<
fda0: 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  p>The sqlite_sta
fdb0: 74 32 20 65 6e 74 72 69 65 73 20 66 6f 72 20 61  t2 entries for a
fdc0: 6e 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76  n index that hav
fdd0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 73  e sqlite_stat2.s
fde0: 61 6d 70 6c 65 6e 6f 0a 62 65 74 77 65 65 6e 20  ampleno.between 
fdf0: 30 20 61 6e 64 20 39 20 69 6e 63 6c 75 73 69 76  0 and 9 inclusiv
fe00: 65 20 61 72 65 20 73 61 6d 70 6c 65 73 20 6f 66  e are samples of
fe10: 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b   the left-most k
fe20: 65 79 20 76 61 6c 75 65 20 69 6e 20 74 68 65 0a  ey value in the.
fe30: 69 6e 64 65 78 20 74 61 6b 65 6e 20 61 74 20 65  index taken at e
fe40: 76 65 6e 6c 79 20 73 70 61 63 65 64 20 70 6f 69  venly spaced poi
fe50: 6e 74 73 20 61 6c 6f 6e 67 20 74 68 65 20 69 6e  nts along the in
fe60: 64 65 78 2e 0a 4c 65 74 20 43 20 62 65 20 74 68  dex..Let C be th
fe70: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
fe80: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 54   in the index..T
fe90: 68 65 6e 20 74 68 65 20 73 61 6d 70 6c 65 64 20  hen the sampled 
fea0: 72 6f 77 73 20 61 72 65 20 67 69 76 65 6e 20 62  rows are given b
feb0: 79 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  y..<blockquote>.
fec0: 20 20 20 20 20 72 6f 77 6e 75 6d 62 65 72 20 3d       rownumber =
fed0: 20 28 69 2a 43 2a 32 20 2b 20 43 29 2f 32 30 0a   (i*C*2 + C)/20.
fee0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
fef0: 70 3e 54 68 65 20 76 61 72 69 61 62 6c 65 20 69  p>The variable i
ff00: 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
ff10: 20 65 78 70 72 65 73 73 69 6f 6e 20 76 61 72 69   expression vari
ff20: 65 73 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  es between 0 and
ff30: 20 39 2e 0a 43 6f 6e 63 65 70 74 75 61 6c 6c 79   9..Conceptually
ff40: 2c 20 74 68 65 20 69 6e 64 65 78 20 73 70 61 63  , the index spac
ff50: 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
ff60: 6f 0a 31 30 20 75 6e 69 66 6f 72 6d 20 62 75 63  o.10 uniform buc
ff70: 6b 65 74 73 20 61 6e 64 20 74 68 65 20 73 61 6d  kets and the sam
ff80: 70 6c 65 73 20 61 72 65 20 74 68 65 20 6d 69 64  ples are the mid
ff90: 64 6c 65 20 72 6f 77 20 66 72 6f 6d 20 65 61 63  dle row from eac
ffa0: 68 20 62 75 63 6b 65 74 2e 0a 0a 3c 70 3e 54 68  h bucket...<p>Th
ffb0: 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 73 71 6c  e format for sql
ffc0: 69 74 65 5f 73 74 61 74 32 20 69 73 20 72 65 63  ite_stat2 is rec
ffd0: 6f 72 64 65 64 20 68 65 72 65 20 66 6f 72 20 6c  orded here for l
ffe0: 65 67 61 63 79 20 72 65 66 65 72 65 6e 63 65 2e  egacy reference.
fff0: 20 20 0a 52 65 63 65 6e 74 20 76 65 72 73 69 6f    .Recent versio
10000 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6e 6f 20  ns of SQLite no 
10010 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 20 73  longer support s
10020 71 6c 69 74 65 5f 73 74 61 74 32 20 61 6e 64 20  qlite_stat2 and 
10030 74 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74 32  the.sqlite_stat2
10040 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 65 78   table, it is ex
10050 69 73 74 73 2c 20 69 73 20 73 69 6d 70 6c 79 20  ists, is simply 
10060 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 68  ignored...<tcl>h
10070 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 33  d_fragment stat3
10080 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74  tab {sqlite_stat
10090 33 7d 20 53 51 4c 49 54 45 5f 53 54 41 54 33 3c  3} SQLITE_STAT3<
100a0 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 35 20  /tcl>.<h4>2.6.5 
100b0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
100c0 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e   table</h4>..<p>
100d0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
100e0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66   is only used if
100f0 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
10100 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45  led.with [SQLITE
10110 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f  _ENABLE_STAT3] o
10120 72 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  r [SQLITE_ENABLE
10130 5f 53 54 41 54 34 5d 0a 61 6e 64 20 69 66 20 74  _STAT4].and if t
10140 68 65 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  he SQLite versio
10150 6e 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 37 2e  n number is 3.7.
10160 39 20 6f 72 20 67 72 65 61 74 65 72 2e 0a 54 68  9 or greater..Th
10170 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
10180 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20  able is neither 
10190 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e  read nor written
101a0 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20   by any.version 
101b0 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65  of SQLite before
101c0 20 33 2e 37 2e 39 2e 0a 49 66 20 74 68 65 20 5b   3.7.9..If the [
101d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
101e0 41 54 34 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  AT4] compile-tim
101f0 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
10200 20 61 6e 64 20 74 68 65 0a 53 51 4c 69 74 65 20   and the.SQLite 
10210 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69  version number i
10220 73 20 33 2e 38 2e 31 20 6f 72 20 67 72 65 61 74  s 3.8.1 or great
10230 65 72 2c 20 74 68 65 6e 20 73 71 6c 69 74 65 5f  er, then sqlite_
10240 73 74 61 74 33 20 6d 69 67 68 74 0a 62 65 20 72  stat3 might.be r
10250 65 61 64 20 62 75 74 20 6e 6f 74 20 77 72 69 74  ead but not writ
10260 74 65 6e 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  ten..The sqlite_
10270 73 74 61 74 33 20 74 61 62 6c 65 20 63 6f 6e 74  stat3 table cont
10280 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20  ains additional 
10290 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75  information.abou
102a0 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69  t the distributi
102b0 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69  on of keys withi
102c0 6e 20 61 6e 20 69 6e 64 65 78 2c 20 69 6e 66 6f  n an index, info
102d0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65  rmation that the
102e0 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63  .query planner c
102f0 61 6e 20 75 73 65 20 74 6f 20 64 65 76 69 73 65  an use to devise
10300 20 62 65 74 74 65 72 20 61 6e 64 20 66 61 73 74   better and fast
10310 65 72 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74  er query algorit
10320 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d  hms..^(The schem
10330 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  a of the sqlite_
10340 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 61  stat3 table is a
10350 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f  s follows:..<blo
10360 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
10370 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
10380 65 5f 73 74 61 74 33 28 74 62 6c 2c 69 64 78 2c  e_stat3(tbl,idx,
10390 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d  nEq,nLt,nDLt,sam
103a0 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  ple);.</pre></bl
103b0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
103c0 54 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c  There are usuall
103d0 79 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69  y multiple entri
103e0 65 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  es in the sqlite
103f0 5f 73 74 61 74 33 20 74 61 62 6c 65 20 66 6f 72  _stat3 table for
10400 20 65 61 63 68 20 69 6e 64 65 78 2e 0a 5e 28 54   each index..^(T
10410 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  he sqlite_stat3.
10420 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f  sample column ho
10430 6c 64 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  lds the value of
10440 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 66   the left-most f
10450 69 65 6c 64 20 6f 66 20 61 6e 0a 69 6e 64 65 78  ield of an.index
10460 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 73   identified by s
10470 71 6c 69 74 65 5f 73 74 61 74 33 2e 69 64 78 20  qlite_stat3.idx 
10480 61 6e 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33  and sqlite_stat3
10490 2e 74 62 6c 2e 29 5e 0a 5e 28 54 68 65 20 73 71  .tbl.)^.^(The sq
104a0 6c 69 74 65 5f 73 74 61 74 33 2e 6e 45 71 20 63  lite_stat3.nEq c
104b0 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20  olumn holds the 
104c0 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62  approximate.numb
104d0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
104e0 20 74 68 65 20 69 6e 64 65 78 20 77 68 6f 73 65   the index whose
104f0 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
10500 6e 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 65  n exactly matche
10510 73 0a 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a  s.the sample.)^.
10520 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ^(The sqlite_sta
10530 74 33 2e 6e 4c 74 20 68 6f 6c 64 73 20 74 68 65  t3.nLt holds the
10540 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d   approximate num
10550 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
10560 6e 20 74 68 65 0a 69 6e 64 65 78 20 77 68 6f 73  n the.index whos
10570 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  e left-most colu
10580 6d 6e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  mn is less than 
10590 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 5e 28  the sample.)^.^(
105a0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
105b0 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c  .nDLt column hol
105c0 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  ds the approxima
105d0 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  te.number of dis
105e0 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f 73 74 20  tinct left-most 
105f0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69  entries in the i
10600 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 6c 65  ndex that are le
10610 73 73 20 74 68 61 6e 0a 74 68 65 20 73 61 6d 70  ss than.the samp
10620 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72 65  le.)^..<p>^There
10630 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74   can be an arbit
10640 72 61 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73  rary number of s
10650 71 6c 69 74 65 5f 73 74 61 74 33 20 65 6e 74 72  qlite_stat3 entr
10660 69 65 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54  ies per index..T
10670 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d  he [ANALYZE] com
10680 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61  mand will typica
10690 6c 6c 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c  lly generate sql
106a0 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 73  ite_stat3 tables
106b0 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65  .that contain be
106c0 74 77 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20  tween 10 and 40 
106d0 73 61 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65  samples that are
106e0 20 64 69 73 74 72 69 62 75 74 65 64 20 61 63 72   distributed acr
106f0 6f 73 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63  oss.the key spac
10700 65 20 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65  e and with large
10710 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 70   nEq values...<p
10720 3e 5e 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72  >^(In a well-for
10730 6d 65 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33  med sqlite_stat3
10740 20 74 61 62 6c 65 2c 20 74 68 65 20 73 61 6d 70   table, the samp
10750 6c 65 73 20 66 6f 72 20 61 6e 79 20 73 69 6e 67  les for any sing
10760 6c 65 0a 69 6e 64 65 78 20 6d 75 73 74 20 61 70  le.index must ap
10770 70 65 61 72 20 69 6e 20 74 68 65 20 73 61 6d 65  pear in the same
10780 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79   order that they
10790 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 69 6e   occur in the in
107a0 64 65 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72 20  dex.  .In other 
107b0 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 65 6e  words, if the en
107c0 74 72 79 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f  try with left-mo
107d0 73 74 20 63 6f 6c 75 6d 6e 20 53 31 20 69 73 20  st column S1 is 
107e0 65 61 72 6c 69 65 72 20 69 6e 0a 74 68 65 20 69  earlier in.the i
107f0 6e 64 65 78 20 62 2d 74 72 65 65 20 74 68 61 6e  ndex b-tree than
10800 20 74 68 65 0a 65 6e 74 72 79 20 77 69 74 68 20   the.entry with 
10810 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
10820 20 53 32 2c 20 74 68 65 6e 20 69 6e 20 74 68 65   S2, then in the
10830 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
10840 62 6c 65 2c 20 0a 73 61 6d 70 6c 65 20 53 31 20  ble, .sample S1 
10850 6d 75 73 74 20 68 61 76 65 20 61 20 73 6d 61 6c  must have a smal
10860 6c 65 72 20 72 6f 77 69 64 20 74 68 61 6e 20 73  ler rowid than s
10870 61 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c 74 63  ample S2.)^..<tc
10880 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74  l>hd_fragment st
10890 61 74 34 74 61 62 20 7b 73 71 6c 69 74 65 5f 73  at4tab {sqlite_s
108a0 74 61 74 34 7d 20 53 51 4c 49 54 45 5f 53 54 41  tat4} SQLITE_STA
108b0 54 34 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36  T4</tcl>.<h4>2.6
108c0 2e 36 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .6 The sqlite_st
108d0 61 74 34 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a  at4 table</h4>..
108e0 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
108f0 61 74 34 20 69 73 20 6f 6e 6c 79 20 63 72 65 61  at4 is only crea
10900 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20  ted and is only 
10910 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  used if SQLite i
10920 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20  s compiled.with 
10930 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
10940 54 41 54 34 5d 20 61 6e 64 20 69 66 20 74 68 65  TAT4] and if the
10950 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
10960 6e 75 6d 62 65 72 20 69 73 0a 33 2e 38 2e 31 20  number is.3.8.1 
10970 6f 72 20 67 72 65 61 74 65 72 2e 20 20 54 68 65  or greater.  The
10980 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
10990 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 72  ble is neither r
109a0 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20  ead nor written 
109b0 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f  by any.version o
109c0 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20  f SQLite before 
109d0 33 2e 38 2e 31 2e 0a 54 68 65 20 73 71 6c 69 74  3.8.1..The sqlit
109e0 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 63 6f  e_stat4 table co
109f0 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61  ntains additiona
10a00 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62  l information.ab
10a10 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62 75  out the distribu
10a20 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74  tion of keys wit
10a30 68 69 6e 20 61 6e 20 69 6e 64 65 78 20 6f 72 20  hin an index or 
10a40 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e  the distribution
10a50 20 6f 66 0a 6b 65 79 73 20 69 6e 20 74 68 65 20   of.keys in the 
10a60 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 66 20 61  primary key of a
10a70 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
10a80 20 74 61 62 6c 65 2e 0a 54 68 65 20 71 75 65 72   table..The quer
10a90 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 73 6f  y planner can so
10aa0 6d 65 74 69 6d 65 73 20 75 73 65 20 74 68 65 20  metimes use the 
10ab0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
10ac0 6d 61 74 69 6f 6e 20 69 6e 0a 74 68 65 20 73 71  mation in.the sq
10ad0 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
10ae0 20 74 6f 20 64 65 76 69 73 65 20 62 65 74 74 65   to devise bette
10af0 72 20 61 6e 64 20 66 61 73 74 65 72 20 71 75 65  r and faster que
10b00 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e  ry algorithms..^
10b10 28 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74  (The schema of t
10b20 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
10b30 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c  table is as foll
10b40 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ows:..<blockquot
10b50 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
10b60 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74  ABLE sqlite_stat
10b70 34 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c  4(tbl,idx,nEq,nL
10b80 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a  t,nDLt,sample);.
10b90 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
10ba0 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20  te>)^..<p>There 
10bb0 61 72 65 20 74 79 70 69 63 61 6c 6c 79 20 62 65  are typically be
10bc0 74 77 65 65 6e 20 31 30 20 74 6f 20 34 30 20 65  tween 10 to 40 e
10bd0 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 73 71  ntries in the sq
10be0 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
10bf0 20 66 6f 72 0a 65 61 63 68 20 69 6e 64 65 78 20   for.each index 
10c00 66 6f 72 20 77 68 69 63 68 20 73 74 61 74 69 73  for which statis
10c10 74 69 63 73 20 61 72 65 20 61 76 61 69 6c 61 62  tics are availab
10c20 6c 65 2c 20 68 6f 77 65 76 65 72 20 74 68 65 73  le, however thes
10c30 65 20 6c 69 6d 69 74 73 20 61 72 65 0a 6e 6f 74  e limits are.not
10c40 20 68 61 72 64 20 62 6f 75 6e 64 73 2e 0a 54 68   hard bounds..Th
10c50 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
10c60 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
10c70 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
10c80 62 6c 65 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f  ble are as follo
10c90 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74  ws:..<center>.<t
10ca0 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
10cb0 77 69 64 74 68 3d 22 31 30 30 25 22 20 63 65 6c  width="100%" cel
10cc0 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a 3c  lpadding="10">.<
10cd0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
10ce0 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
10cf0 22 3e 74 62 6c 3a 3c 2f 74 64 3e 0a 20 20 20 20  ">tbl:</td>.    
10d00 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  <td>^(The sqlite
10d10 5f 73 74 61 74 34 2e 74 62 6c 20 63 6f 6c 75 6d  _stat4.tbl colum
10d20 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20  n holds name of 
10d30 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 6f  the table that o
10d40 77 6e 73 0a 20 20 20 20 74 68 65 20 69 6e 64 65  wns.    the inde
10d50 78 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 64  x that the row d
10d60 65 73 63 72 69 62 65 73 29 5e 0a 0a 3c 74 72 3e  escribes)^..<tr>
10d70 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
10d80 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 69   align="right">i
10d90 64 78 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  dx:</td>.    <td
10da0 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
10db0 61 74 34 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 68  at4.idx column h
10dc0 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20 74 68 65  olds name of the
10dd0 20 69 6e 64 65 78 20 74 68 61 74 20 74 68 65 0a   index that the.
10de0 20 20 20 20 72 6f 77 20 64 65 73 63 72 69 62 65      row describe
10df0 73 2c 20 6f 72 20 69 6e 20 74 68 65 20 63 61 73  s, or in the cas
10e00 65 20 6f 66 0a 20 20 20 20 61 6e 20 73 71 6c 69  e of.    an sqli
10e10 74 65 5f 73 74 61 74 34 20 65 6e 74 72 79 20 66  te_stat4 entry f
10e20 6f 72 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  or a [WITHOUT RO
10e30 57 49 44 5d 20 74 61 62 6c 65 2c 20 74 68 65 0a  WID] table, the.
10e40 20 20 20 20 6e 61 6d 65 20 6f 66 20 74 68 65 20      name of the 
10e50 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 29 5e 0a  table itself.)^.
10e60 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
10e70 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
10e80 68 74 22 3e 73 61 6d 70 6c 65 3a 3c 2f 74 64 3e  ht">sample:</td>
10e90 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
10ea0 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70  qlite_stat4.samp
10eb0 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  le column holds 
10ec0 61 20 42 4c 4f 42 0a 20 20 20 20 69 6e 20 74 68  a BLOB.    in th
10ed0 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
10ee0 5d 20 74 68 61 74 20 65 6e 63 6f 64 65 73 20 74  ] that encodes t
10ef0 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
10f00 6e 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20  ns followed by. 
10f10 20 20 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72     the rowid for
10f20 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20 6f   a rowid table o
10f30 72 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  r by the columns
10f40 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
10f50 6b 65 79 20 0a 20 20 20 20 66 6f 72 20 61 20 57  key .    for a W
10f60 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
10f70 6c 65 2e 29 5e 0a 20 20 20 20 5e 28 54 68 65 20  le.)^.    ^(The 
10f80 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d  sqlite_stat4.sam
10f90 70 6c 65 20 42 4c 4f 42 20 66 6f 72 20 74 68 65  ple BLOB for the
10fa0 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
10fb0 61 62 6c 65 20 69 74 73 65 6c 66 20 0a 20 20 20  able itself .   
10fc0 20 63 6f 6e 74 61 69 6e 73 20 6a 75 73 74 20 74   contains just t
10fd0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
10fe0 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 29 5e  e primary key.)^
10ff0 0a 20 20 20 20 4c 65 74 20 74 68 65 20 6e 75 6d  .    Let the num
11000 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 65  ber of columns e
11010 6e 63 6f 64 65 64 20 62 79 20 74 68 65 20 73 71  ncoded by the sq
11020 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c  lite_stat4.sampl
11030 65 20 62 6c 6f 62 20 62 65 20 4e 2e 0a 20 20 20  e blob be N..   
11040 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e   ^For indexes on
11050 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77   an ordinary row
11060 69 64 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c 6c  id table, N will
11070 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61   be one more tha
11080 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 0a 20 20  n the number .  
11090 20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 64    of columns ind
110a0 65 78 65 64 2e 0a 20 20 20 20 5e 46 6f 72 20 69  exed..    ^For i
110b0 6e 64 65 78 65 73 20 6f 6e 20 57 49 54 48 4f 55  ndexes on WITHOU
110c0 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2c 20  T ROWID tables, 
110d0 4e 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75  N will be the nu
110e0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a  mber of columns.
110f0 20 20 20 20 69 6e 64 65 78 65 64 20 70 6c 75 73      indexed plus
11100 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
11110 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 70 72  olumns in the pr
11120 69 6d 61 72 79 20 6b 65 79 2e 0a 20 20 20 20 5e  imary key..    ^
11130 46 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f  For a WITHOUT RO
11140 57 49 44 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c  WID table, N wil
11150 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20  l be the number 
11160 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
11170 65 0a 20 20 20 20 70 72 69 6d 61 72 79 20 6b 65  e.    primary ke
11180 79 2e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  y...<tr><td vali
11190 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
111a0 72 69 67 68 74 22 3e 6e 45 71 3a 3c 2f 74 64 3e  right">nEq:</td>
111b0 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
111c0 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 45 71 20  qlite_stat4.nEq 
111d0 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c  column holds a l
111e0 69 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72  ist of N integer
111f0 73 20 77 68 65 72 65 20 0a 20 20 20 20 74 68 65  s where .    the
11200 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73   K-th integer is
11210 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
11220 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
11230 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a  es in the index.
11240 20 20 20 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d      whose left-m
11250 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 65 78  ost K columns ex
11260 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20  actly match the 
11270 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  K left-most colu
11280 6d 6e 73 0a 20 20 20 20 6f 66 20 74 68 65 20 73  mns.    of the s
11290 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c 74  ample.)^..<tr><t
112a0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
112b0 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 4c 74  lign="right">nLt
112c0 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e  :</td>.    <td>^
112d0 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
112e0 34 2e 6e 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c  4.nLt column hol
112f0 64 73 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69  ds a list of N i
11300 6e 74 65 67 65 72 73 20 77 68 65 72 65 0a 20 20  ntegers where.  
11310 20 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67    the K-th integ
11320 65 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  er is the approx
11330 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
11340 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20  entries in the. 
11350 20 20 20 69 6e 64 65 78 20 77 68 6f 73 65 20 4b     index whose K
11360 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
11370 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76  ns are collectiv
11380 65 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68  ely less than th
11390 65 20 0a 20 20 20 20 4b 20 6c 65 66 74 2d 6d 6f  e .    K left-mo
113a0 73 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  st columns of th
113b0 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72  e sample.)^..<tr
113c0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ><td valign="top
113d0 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
113e0 6e 44 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c  nDLt:</td>.    <
113f0 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  td>^(The sqlite_
11400 73 74 61 74 34 2e 6e 44 4c 74 20 63 6f 6c 75 6d  stat4.nDLt colum
11410 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f  n holds a list o
11420 66 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65  f N integers whe
11430 72 65 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20  re.    the K-th 
11440 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61  integer is the a
11450 70 70 72 6f 78 69 6d 61 74 65 0a 20 20 20 20 6e  pproximate.    n
11460 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
11470 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68   in the index th
11480 61 74 20 61 72 65 20 64 69 73 74 69 6e 63 74 20  at are distinct 
11490 69 6e 20 74 68 65 20 66 69 72 73 74 20 4b 20 63  in the first K c
114a0 6f 6c 75 6d 6e 73 20 61 6e 64 0a 20 20 20 20 77  olumns and.    w
114b0 68 65 72 65 20 74 68 65 20 6c 65 66 74 2d 6d 6f  here the left-mo
114c0 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65  st K columns are
114d0 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65   collectively le
114e0 73 73 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  ss than the left
114f0 2d 6d 6f 73 74 0a 20 20 20 20 4b 20 63 6f 6c 75  -most.    K colu
11500 6d 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c  mns of the sampl
11510 65 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  e.)^.</table>.</
11520 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20  center>..<p>The 
11530 73 71 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20  sqlite_stat4 is 
11540 61 20 67 65 6e 65 72 61 6c 69 7a 61 74 69 6f 6e  a generalization
11550 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
11560 74 61 74 33 20 74 61 62 6c 65 2e 20 20 54 68 65  tat3 table.  The
11570 0a 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61  .sqlite_stat3 ta
11580 62 6c 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66  ble provides inf
11590 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
115a0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c  he left-most col
115b0 75 6d 6e 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20  umn of an.index 
115c0 77 68 65 72 65 61 73 20 74 68 65 20 73 71 6c 69  whereas the sqli
115d0 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 70  te_stat4 table p
115e0 72 6f 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74  rovides informat
115f0 69 6f 6e 20 61 62 6f 75 74 20 61 6c 6c 20 63 6f  ion about all co
11600 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 69 6e 64  lumns.of the ind
11610 65 78 2e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63  ex...<p>^There c
11620 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74 72 61  an be an arbitra
11630 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c  ry number of sql
11640 69 74 65 5f 73 74 61 74 34 20 65 6e 74 72 69 65  ite_stat4 entrie
11650 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54 68 65  s per index..The
11660 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61   [ANALYZE] comma
11670 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c  nd will typicall
11680 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c 69 74  y generate sqlit
11690 65 5f 73 74 61 74 34 20 74 61 62 6c 65 73 0a 74  e_stat4 tables.t
116a0 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65 74 77  hat contain betw
116b0 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20 73 61  een 10 and 40 sa
116c0 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65 20 64  mples that are d
116d0 69 73 74 72 69 62 75 74 65 64 20 61 63 72 6f 73  istributed acros
116e0 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63 65 20  s.the key space 
116f0 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65 20 6e  and with large n
11700 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e  Eq values...<p>^
11710 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  (In a well-forme
11720 64 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  d sqlite_stat4 t
11730 61 62 6c 65 2c 20 74 68 65 20 73 61 6d 70 6c 65  able, the sample
11740 73 20 66 6f 72 20 61 6e 79 20 73 69 6e 67 6c 65  s for any single
11750 0a 69 6e 64 65 78 20 6d 75 73 74 20 61 70 70 65  .index must appe
11760 61 72 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6f  ar in the same o
11770 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20 6f  rder that they o
11780 63 63 75 72 20 69 6e 20 74 68 65 20 69 6e 64 65  ccur in the inde
11790 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72 20 77 6f  x.  .In other wo
117a0 72 64 73 2c 20 69 66 20 65 6e 74 72 79 20 53 31  rds, if entry S1
117b0 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74   is earlier in t
117c0 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  he index b-tree 
117d0 74 68 61 6e 20 0a 65 6e 74 72 79 20 53 32 2c 20  than .entry S2, 
117e0 74 68 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69  then in the sqli
117f0 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20  te_stat4 table, 
11800 73 61 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68  sample S1 must h
11810 61 76 65 20 61 0a 73 6d 61 6c 6c 65 72 20 72 6f  ave a.smaller ro
11820 77 69 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20  wid than sample 
11830 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  S2.)^..<tcl>hd_f
11840 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b  ragment rollback
11850 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63  journal {rollbac
11860 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74  k journal format
11870 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e 30 20  }</tcl>.<h2>3.0 
11880 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  The Rollback Jou
11890 72 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  rnal</h2>..<p>Th
118a0 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
118b0 61 6c 20 69 73 20 61 20 66 69 6c 65 20 61 73 73  al is a file ass
118c0 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
118d0 68 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  h SQLite databas
118e0 65 0a 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64  e.file that hold
118f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   information use
11900 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65  d to restore the
11910 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
11920 6f 20 69 74 73 20 69 6e 69 74 69 61 6c 0a 73 74  o its initial.st
11930 61 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63  ate during the c
11940 6f 75 72 73 65 20 6f 66 20 61 20 74 72 61 6e 73  ourse of a trans
11950 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c  action..^The rol
11960 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
11970 6c 65 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63  le is always loc
11980 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  ated in the same
11990 20 0a 64 69 72 65 63 74 6f 72 79 20 61 73 20 74   .directory as t
119a0 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  he database.file
119b0 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d   and has the sam
119c0 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61  e name as the da
119d0 74 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20  tabase file but 
119e0 77 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a  with the string.
119f0 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74  "<tt>-journal</t
11a00 74 3e 22 20 61 70 70 65 6e 64 65 64 2e 20 20 54  t>" appended.  T
11a10 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
11a20 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61   a single rollba
11a30 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63  ck journal.assoc
11a40 69 61 74 65 64 20 77 69 74 68 20 61 20 67 69 76  iated with a giv
11a50 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68  e database and h
11a60 65 6e 63 65 20 74 68 65 72 65 20 63 61 6e 20 6f  ence there can o
11a70 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74 65  nly be one write
11a80 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65  .transaction ope
11a90 6e 20 61 67 61 69 6e 73 74 20 61 20 73 69 6e 67  n against a sing
11aa0 6c 65 20 64 61 74 61 62 61 73 65 20 61 74 20 6f  le database at o
11ab0 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70  ne time.</p>..<p
11ac0 3e 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f  >If a transactio
11ad0 6e 20 69 73 20 61 62 6f 72 74 65 64 20 64 75 65  n is aborted due
11ae0 20 74 6f 20 61 6e 20 61 70 70 6c 69 63 61 74 69   to an applicati
11af0 6f 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f 70 65  on crash, an ope
11b00 72 61 74 69 6e 67 0a 73 79 73 74 65 6d 20 63 72  rating.system cr
11b10 61 73 68 2c 20 6f 72 20 61 20 68 61 72 64 77 61  ash, or a hardwa
11b20 72 65 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65  re power failure
11b30 20 6f 72 20 63 72 61 73 68 2c 20 74 68 65 6e 20   or crash, then 
11b40 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 61 79  the database may
11b50 0a 62 65 20 6c 65 66 74 20 69 6e 20 61 6e 20 69  .be left in an i
11b60 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74  nconsistent stat
11b70 65 2e 20 20 5e 54 68 65 20 6e 65 78 74 20 74 69  e.  ^The next ti
11b80 6d 65 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  me SQLite attemp
11b90 74 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64  ts to open.the d
11ba0 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68  atabase file, th
11bb0 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68  e presence of th
11bc0 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
11bd0 61 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20  al file will be 
11be0 0a 64 65 74 65 63 74 65 64 20 61 6e 64 20 74 68  .detected and th
11bf0 65 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62  e journal will b
11c00 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
11c10 70 6c 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72  played back to r
11c20 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62  estore the.datab
11c30 61 73 65 20 74 6f 20 69 74 73 20 73 74 61 74 65  ase to its state
11c40 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
11c50 20 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20   the incomplete 
11c60 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
11c70 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b  ..<p>^A rollback
11c80 20 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79   journal is only
11c90 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
11ca0 65 20 76 61 6c 69 64 20 69 66 20 69 74 20 65 78  e valid if it ex
11cb0 69 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e  ists and.contain
11cc0 73 20 61 20 76 61 6c 69 64 20 68 65 61 64 65 72  s a valid header
11cd0 2e 20 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73  .  Hence a trans
11ce0 61 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f  action can be co
11cf0 6d 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f  mmitted in one.o
11d00 66 20 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f  f three ways:.<o
11d10 6c 3e 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c  l>.<li>^(The rol
11d20 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
11d30 6c 65 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65  le can be delete
11d40 64 29 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20 72  d)^,.<li>^(The r
11d50 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
11d60 66 69 6c 65 20 63 61 6e 20 62 65 20 74 72 75 6e  file can be trun
11d70 63 61 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65  cated to zero le
11d80 6e 67 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e  ngth)^, or.<li>^
11d90 28 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 74  (The header of t
11da0 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
11db0 6e 61 6c 20 63 61 6e 20 62 65 20 6f 76 65 72 77  nal can be overw
11dc0 72 69 74 74 65 6e 20 77 69 74 68 0a 69 6e 76 61  ritten with.inva
11dd0 6c 69 64 20 68 65 61 64 65 72 20 74 65 78 74 20  lid header text 
11de0 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c  (for example, al
11df0 6c 20 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c  l zeros).)^.</ol
11e00 3e 0a 5e 54 68 65 73 65 20 74 68 72 65 65 20 77  >.^These three w
11e10 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e  ays of committin
11e20 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  g a transaction 
11e30 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  correspond to th
11e40 65 20 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41  e DELETE,.TRUNCA
11e50 54 45 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20  TE, and PERSIST 
11e60 73 65 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63  settings, respec
11e70 74 69 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b  tively, of the [
11e80 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61  journal_mode pra
11e90 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e  gma]..</p>...<p>
11ea0 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b  A valid rollback
11eb0 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20   journal begins 
11ec0 77 69 74 68 20 61 20 68 65 61 64 65 72 20 69 6e  with a header in
11ed0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   the following f
11ee0 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  ormat:</p>..<cen
11ef0 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b  ter>.<i>Rollback
11f00 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20   Journal Header 
11f10 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
11f20 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
11f30 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
11f40 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
11f50 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
11f60 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  n.<tr><td valign
11f70 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11f80 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  r>0.    <td vali
11f90 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
11fa0 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65  ter>8.    <td>He
11fb0 61 64 65 72 20 73 74 72 69 6e 67 3a 20 20 30 78  ader string:  0x
11fc0 64 39 2c 20 30 78 64 35 2c 20 30 78 30 35 2c 20  d9, 0xd5, 0x05, 
11fd0 30 78 66 39 2c 20 30 78 32 30 2c 20 30 78 61 31  0xf9, 0x20, 0xa1
11fe0 2c 20 30 78 36 33 2c 20 30 78 64 37 0a 3c 74 72  , 0x63, 0xd7.<tr
11ff0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12000 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20  align=center>8. 
12010 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
12020 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12030 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 22 50 61  .    <td>The "Pa
12040 67 65 20 43 6f 75 6e 74 22 20 2d 20 54 68 65 20  ge Count" - The 
12050 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
12060 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 67 6d  in the next segm
12070 65 6e 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20  ent of the .    
12080 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20      journal, or 
12090 2d 31 20 74 6f 0a 20 20 20 20 20 20 20 20 6d 65  -1 to.        me
120a0 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74  an all content t
120b0 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
120c0 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61   file.<tr><td va
120d0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
120e0 65 6e 74 65 72 3e 31 32 0a 20 20 20 20 3c 74 64  enter>12.    <td
120f0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12100 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12110 74 64 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63  td>A random nonc
12120 65 20 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73  e for the checks
12130 75 6d 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  um.<tr><td valig
12140 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12150 65 72 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61  er>16.    <td va
12160 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12170 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
12180 49 6e 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20  Initial size of 
12190 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
121a0 70 61 67 65 73 0a 3c 74 72 3e 3c 74 64 20 76 61  pages.<tr><td va
121b0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
121c0 65 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c 74 64  enter>20.    <td
121d0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
121e0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
121f0 74 64 3e 53 69 7a 65 20 6f 66 20 61 20 64 69 73  td>Size of a dis
12200 6b 20 73 65 63 74 6f 72 20 61 73 73 75 6d 65 64  k sector assumed
12210 20 62 79 20 74 68 65 20 70 72 6f 63 65 73 73 20   by the process 
12220 74 68 61 74 20 77 72 6f 74 65 20 74 68 69 73 0a  that wrote this.
12230 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e          journal.
12240 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12250 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12260 3e 32 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >24.    <td vali
12270 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12280 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69  ter>4.    <td>Si
12290 7a 65 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  ze of pages in t
122a0 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f 74  his journal..</t
122b0 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a  able>.</center>.
122c0 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20  .<p>^A rollback 
122d0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 69  journal header i
122e0 73 20 70 61 64 64 65 64 20 77 69 74 68 20 7a 65  s padded with ze
122f0 72 6f 73 20 6f 75 74 20 74 6f 20 74 68 65 20 73  ros out to the s
12300 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c 65  ize of a .single
12310 20 73 65 63 74 6f 72 20 28 61 73 20 64 65 66 69   sector (as defi
12320 6e 65 64 20 62 79 20 74 68 65 20 73 65 63 74 6f  ned by the secto
12330 72 20 73 69 7a 65 20 69 6e 74 65 67 65 72 20 61  r size integer a
12340 74 20 6f 66 66 73 65 74 20 32 30 29 2e 0a 54 68  t offset 20)..Th
12350 65 20 68 65 61 64 65 72 20 69 73 20 69 6e 20 61  e header is in a
12360 20 73 65 63 74 6f 72 20 62 79 20 69 74 73 65 6c   sector by itsel
12370 66 20 73 6f 20 74 68 61 74 20 69 66 20 61 20 70  f so that if a p
12380 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63 75 72 73  ower loss occurs
12390 20 77 68 69 6c 65 0a 77 72 69 74 69 6e 67 20 74   while.writing t
123a0 68 65 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f 72  he sector, infor
123b0 6d 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c  mation that foll
123c0 6f 77 73 20 74 68 65 20 68 65 61 64 65 72 20 77  ows the header w
123d0 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c 6c  ill be.(hopefull
123e0 79 29 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f 70  y) undamaged.</p
123f0 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68 65  >..<p>^After the
12400 20 68 65 61 64 65 72 20 61 6e 64 20 7a 65 72 6f   header and zero
12410 20 70 61 64 64 69 6e 67 20 61 72 65 20 7a 65 72   padding are zer
12420 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 20 72  o or more page r
12430 65 63 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a 70  ecords.  ^Each.p
12440 61 67 65 20 72 65 63 6f 72 64 20 73 74 6f 72 65  age record store
12450 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  s a copy of the 
12460 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 70 61 67  content of a pag
12470 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
12480 61 73 65 20 66 69 6c 65 0a 62 65 66 6f 72 65 20  ase file.before 
12490 69 74 20 77 61 73 20 63 68 61 6e 67 65 64 2e 20  it was changed. 
124a0 20 5e 54 68 65 20 73 61 6d 65 20 70 61 67 65 20   ^The same page 
124b0 6d 61 79 20 6e 6f 74 20 61 70 70 65 61 72 20 6d  may not appear m
124c0 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69  ore than once.wi
124d0 74 68 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  thin a single ro
124e0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
124f0 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69  To rollback an i
12500 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61  ncomplete transa
12510 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73  ction, a process
12520 0a 68 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72  .has merely to r
12530 65 61 64 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ead the rollback
12540 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65   journal from be
12550 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61  ginning to end a
12560 6e 64 0a 77 72 69 74 65 20 70 61 67 65 73 20 66  nd.write pages f
12570 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75 72  ound in the jour
12580 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  nal back into th
12590 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
125a0 61 74 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61  at the.appropria
125b0 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e  te location.</p>
125c0 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 64 61 74  ..<p>Let the dat
125d0 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20  abase page size 
125e0 28 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68  (the value of th
125f0 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
12600 73 65 74 20 32 34 20 0a 69 6e 20 74 68 65 20 6a  set 24 .in the j
12610 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 29 20 62  ournal header) b
12620 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f  e N..Then the fo
12630 72 6d 61 74 20 6f 66 20 61 20 70 61 67 65 20 72  rmat of a page r
12640 65 63 6f 72 64 20 69 73 20 61 73 20 66 6f 6c 6c  ecord is as foll
12650 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  ows:</p>..<cente
12660 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a  r>.<i>Rollback J
12670 6f 75 72 6e 61 6c 20 50 61 67 65 20 52 65 63 6f  ournal Page Reco
12680 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  rd Format</i><br
12690 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
126a0 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  80%" border=1>.<
126b0 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68  tr><th>Offset<th
126c0 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70  >Size<th>Descrip
126d0 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
126e0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
126f0 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76  nter>0.    <td v
12700 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12710 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12720 3e 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72  >The page number
12730 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
12740 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61   file.<tr><td va
12750 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12760 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20  enter>4.    <td 
12770 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12780 3d 63 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74  =center>N.    <t
12790 64 3e 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65  d>Original conte
127a0 6e 74 20 6f 66 20 74 68 65 20 70 61 67 65 20 70  nt of the page p
127b0 72 69 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72  rior to the star
127c0 74 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63  t of the transac
127d0 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
127e0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
127f0 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64  nter>N+4.    <td
12800 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12810 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12820 74 64 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f 74 61  td>Checksum.</ta
12830 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a  ble>.</center>..
12840 0a 3c 70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73  .<p>^(The checks
12850 75 6d 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  um is an unsigne
12860 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  d 32-bit integer
12870 20 63 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c   computed as fol
12880 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  lows:</p>..<ol>.
12890 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74  <li>Initialize t
128a0 68 65 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74  he checksum to t
128b0 68 65 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63  he checksum nonc
128c0 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e  e value found in
128d0 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61   the.journal hea
128e0 64 65 72 20 61 74 20 6f 66 66 73 65 74 20 31 32  der at offset 12
128f0 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65  ..<li>Initialize
12900 20 69 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e   index X to be N
12910 2d 32 30 30 20 28 77 68 65 72 65 20 4e 20 69 73  -200 (where N is
12920 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64   the size of a d
12930 61 74 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20  atabase page.in 
12940 62 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72  bytes..<li>Inter
12950 70 72 65 74 20 74 68 65 20 66 6f 75 72 20 62 79  pret the four by
12960 74 65 73 20 61 74 20 6f 66 66 73 65 74 20 58 20  tes at offset X 
12970 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20 61 73  into the page as
12980 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
12990 64 69 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e  dian.unsigned in
129a0 74 65 67 65 72 2e 20 20 41 64 64 20 74 68 65 20  teger.  Add the 
129b0 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e  value of that in
129c0 74 65 67 65 72 20 74 6f 20 74 68 65 20 63 68 65  teger to the che
129d0 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72  cksum..<li>Subtr
129e0 61 63 65 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a  ace 200 from X..
129f0 3c 6c 69 3e 49 66 20 58 20 69 73 20 67 72 65 61  <li>If X is grea
12a00 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
12a10 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61  l to zero, go ba
12a20 63 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f  ck to step 3..</
12a30 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68  ol>)^..<p>The ch
12a40 65 63 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20  ecksum value is 
12a50 75 73 65 64 20 74 6f 20 67 75 61 72 64 20 61 67  used to guard ag
12a60 61 69 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65  ainst incomplete
12a70 20 77 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75   writes of.a jou
12a80 72 6e 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64  rnal page record
12a90 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77   following a pow
12aa0 65 72 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64  er failure.  A d
12ab0 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20  ifferent random 
12ac0 6e 6f 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61  nonce.is used ea
12ad0 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61  ch time a transa
12ae0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
12af0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e   in order to min
12b00 69 6d 69 7a 65 20 74 68 65 20 72 69 73 6b 0a 74  imize the risk.t
12b10 68 61 74 20 75 6e 77 72 69 74 74 65 6e 20 73 65  hat unwritten se
12b20 63 74 6f 72 73 20 6d 69 67 68 74 20 62 79 20 63  ctors might by c
12b30 68 61 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64 61  hance contain da
12b40 74 61 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65  ta from the same
12b50 20 70 61 67 65 0a 74 68 61 74 20 77 61 73 20 61   page.that was a
12b60 20 70 61 72 74 20 6f 66 20 70 72 69 6f 72 20 6a   part of prior j
12b70 6f 75 72 6e 61 6c 73 2e 20 20 42 79 20 63 68 61  ournals.  By cha
12b80 6e 67 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20  nging the nonce 
12b90 66 6f 72 20 65 61 63 68 0a 74 72 61 6e 73 61 63  for each.transac
12ba0 74 69 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74 61  tion, stale data
12bb0 20 6f 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73 74   on disk will st
12bc0 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 61 6e 20  ill generate an 
12bd0 69 6e 63 6f 72 72 65 63 74 20 63 68 65 63 6b 73  incorrect checks
12be0 75 6d 0a 61 6e 64 20 62 65 20 64 65 74 65 63 74  um.and be detect
12bf0 65 64 20 77 69 74 68 20 68 69 67 68 20 70 72 6f  ed with high pro
12c00 62 61 62 69 6c 69 74 79 2e 20 20 54 68 65 20 63  bability.  The c
12c10 68 65 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65  hecksum only use
12c20 73 20 61 20 73 70 61 72 73 65 20 73 61 6d 70 6c  s a sparse sampl
12c30 65 0a 6f 66 20 33 32 2d 62 69 74 20 77 6f 72 64  e.of 32-bit word
12c40 73 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20  s from the data 
12c50 72 65 63 6f 72 64 20 66 6f 72 20 70 65 72 66 6f  record for perfo
12c60 72 6d 61 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d  rmance reasons -
12c70 20 64 65 73 69 67 6e 20 73 74 75 64 69 65 73 20   design studies 
12c80 0a 64 75 72 69 6e 67 20 74 68 65 20 70 6c 61 6e  .during the plan
12c90 6e 69 6e 67 20 70 68 61 73 65 73 20 6f 66 20 53  ning phases of S
12ca0 51 4c 69 74 65 20 33 2e 30 2e 30 20 73 68 6f 77  QLite 3.0.0 show
12cb0 65 64 0a 61 20 73 69 67 6e 69 66 69 63 61 6e 74  ed.a significant
12cc0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 68 69 74   performance hit
12cd0 20 69 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67   in checksumming
12ce0 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 67 65   the entire page
12cf0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68  .</p>..<p>Let th
12d00 65 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c  e page count val
12d10 75 65 20 61 74 20 6f 66 66 73 65 74 20 38 20 69  ue at offset 8 i
12d20 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65  n the journal he
12d30 61 64 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d  ader be M..^If M
12d40 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
12d50 20 7a 65 72 6f 20 74 68 65 6e 20 61 66 74 65 72   zero then after
12d60 20 4d 20 70 61 67 65 20 72 65 63 6f 72 64 73 20   M page records 
12d70 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
12d80 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20 70 61 64  .may be zero pad
12d90 64 65 64 20 6f 75 74 20 74 6f 20 74 68 65 20 6e  ded out to the n
12da0 65 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  ext multiple of 
12db0 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20  the sector size 
12dc0 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72  and another.jour
12dd0 6e 61 6c 20 68 65 61 64 65 72 20 6d 61 79 20 62  nal header may b
12de0 65 20 69 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c  e inserted.  ^Al
12df0 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  l journal header
12e00 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
12e10 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63  e.journal must c
12e20 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20  ontain the same 
12e30 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
12e40 7a 65 20 61 6e 64 20 73 65 63 74 6f 72 20 73 69  ze and sector si
12e50 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  ze.</p>..<p>^If 
12e60 4d 20 69 73 20 2d 31 20 69 6e 20 74 68 65 20 69  M is -1 in the i
12e70 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68  nitial journal h
12e80 65 61 64 65 72 2c 20 74 68 65 6e 20 74 68 65 20  eader, then the 
12e90 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 20 72  number of page r
12ea0 65 63 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c  ecords.that foll
12eb0 6f 77 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62  ow is computed b
12ec0 79 20 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20  y computing how 
12ed0 6d 61 6e 79 20 70 61 67 65 20 72 65 63 6f 72 64  many page record
12ee0 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68  s will fit in.th
12ef0 65 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  e available spac
12f00 65 20 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 64  e of the remaind
12f10 65 72 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  er of the journa
12f20 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  l file.</p>..<tc
12f30 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
12f40 6c 66 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72  lformat {WAL for
12f50 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 34  mat}</tcl>.<h2>4
12f60 2e 30 20 54 68 65 20 57 72 69 74 65 2d 41 68 65  .0 The Write-Ahe
12f70 61 64 20 4c 6f 67 3c 2f 68 32 3e 0a 0a 3c 70 3e  ad Log</h2>..<p>
12f80 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b  Beginning with [
12f90 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30 5d 2c 20  version 3.7.0], 
12fa0 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
12fb0 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f  a new transactio
12fc0 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65 63 68 61 6e  n.control mechan
12fd0 69 73 6d 20 63 61 6c 6c 65 64 20 22 5b 57 41 4c  ism called "[WAL
12fe0 20 7c 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c   | write-ahead l
12ff0 6f 67 5d 22 20 6f 72 20 22 5b 57 41 4c 5d 22 2e  og]" or "[WAL]".
13000 0a 5e 57 68 65 6e 20 61 20 64 61 74 61 62 61 73  .^When a databas
13010 65 20 69 73 20 69 6e 20 57 41 4c 20 6d 6f 64 65  e is in WAL mode
13020 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  , all connection
13030 73 20 74 6f 20 74 68 61 74 20 64 61 74 61 62 61  s to that databa
13040 73 65 20 6d 75 73 74 0a 75 73 65 20 74 68 65 20  se must.use the 
13050 57 41 4c 2e 20 20 5e 41 20 70 61 72 74 69 63 75  WAL.  ^A particu
13060 6c 61 72 20 64 61 74 61 62 61 73 65 20 77 69 6c  lar database wil
13070 6c 20 75 73 65 20 65 69 74 68 65 72 20 61 20 72  l use either a r
13080 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a  ollback journal.
13090 6f 72 20 61 20 57 41 4c 2c 20 62 75 74 20 6e 6f  or a WAL, but no
130a0 74 20 62 6f 74 68 20 61 74 20 74 68 65 20 73 61  t both at the sa
130b0 6d 65 20 74 69 6d 65 2e 0a 5e 54 68 65 20 57 41  me time..^The WA
130c0 4c 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61  L is always loca
130d0 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
130e0 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65  directory as the
130f0 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61   database.file a
13100 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  nd has the same 
13110 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74 61  name as the data
13120 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77 69  base file but wi
13130 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c  th the string."<
13140 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61 70  tt>-wal</tt>" ap
13150 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33  pended.</p>..<h3
13160 3e 34 2e 31 20 57 41 4c 20 46 69 6c 65 20 46 6f  >4.1 WAL File Fo
13170 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20  rmat</h3>..<p>A 
13180 57 41 4c 20 66 69 6c 65 20 63 6f 6e 73 69 73 74  WAL file consist
13190 73 20 6f 66 20 61 20 68 65 61 64 65 72 20 66 6f  s of a header fo
131a0 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
131b0 72 20 6d 6f 72 65 20 22 66 72 61 6d 65 73 22 2e  r more "frames".
131c0 0a 45 61 63 68 20 66 72 61 6d 65 20 72 65 63 6f  .Each frame reco
131d0 72 64 73 20 74 68 65 20 72 65 76 69 73 65 64 20  rds the revised 
131e0 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 73 69 6e  content of a sin
131f0 67 6c 65 20 70 61 67 65 20 66 72 6f 6d 20 74 68  gle page from th
13200 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e.database file.
13210 20 20 41 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f    All changes to
13220 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
13230 65 20 72 65 63 6f 72 64 65 64 20 62 79 20 77 72  e recorded by wr
13240 69 74 69 6e 67 0a 66 72 61 6d 65 73 20 69 6e 74  iting.frames int
13250 6f 20 74 68 65 20 57 41 4c 2e 20 20 54 72 61 6e  o the WAL.  Tran
13260 73 61 63 74 69 6f 6e 73 20 63 6f 6d 6d 69 74 20  sactions commit 
13270 77 68 65 6e 20 61 20 66 72 61 6d 65 20 69 73 20  when a frame is 
13280 77 72 69 74 74 65 6e 20 74 68 61 74 0a 63 6f 6e  written that.con
13290 74 61 69 6e 73 20 61 20 63 6f 6d 6d 69 74 20 6d  tains a commit m
132a0 61 72 6b 65 72 2e 20 20 5e 41 20 73 69 6e 67 6c  arker.  ^A singl
132b0 65 20 57 41 4c 20 63 61 6e 20 61 6e 64 20 75 73  e WAL can and us
132c0 75 61 6c 6c 79 20 64 6f 65 73 20 72 65 63 6f 72  ually does recor
132d0 64 20 0a 6d 75 6c 74 69 70 6c 65 20 74 72 61 6e  d .multiple tran
132e0 73 61 63 74 69 6f 6e 73 2e 20 20 50 65 72 69 6f  sactions.  Perio
132f0 64 69 63 61 6c 6c 79 2c 20 74 68 65 20 63 6f 6e  dically, the con
13300 74 65 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20  tent of the WAL 
13310 69 73 0a 74 72 61 6e 73 66 65 72 72 65 64 20 62  is.transferred b
13320 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74  ack into the dat
13330 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 61 6e  abase file in an
13340 20 6f 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c 65   operation calle
13350 64 20 61 0a 22 63 68 65 63 6b 70 6f 69 6e 74 22  d a."checkpoint"
13360 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69 6e  .</p>..<p>^A sin
13370 67 6c 65 20 57 41 4c 20 66 69 6c 65 20 63 61 6e  gle WAL file can
13380 20 62 65 20 72 65 75 73 65 64 20 6d 75 6c 74 69   be reused multi
13390 70 6c 65 20 74 69 6d 65 73 2e 20 20 5e 49 6e 20  ple times.  ^In 
133a0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
133b0 0a 57 41 4c 20 63 61 6e 20 66 69 6c 6c 20 75 70  .WAL can fill up
133c0 20 77 69 74 68 20 66 72 61 6d 65 73 20 61 6e 64   with frames and
133d0 20 74 68 65 6e 20 62 65 20 63 68 65 63 6b 70 6f   then be checkpo
133e0 69 6e 74 65 64 20 61 6e 64 20 74 68 65 6e 20 6e  inted and then n
133f0 65 77 0a 66 72 61 6d 65 73 20 63 61 6e 20 6f 76  ew.frames can ov
13400 65 72 77 72 69 74 65 20 74 68 65 20 6f 6c 64 20  erwrite the old 
13410 6f 6e 65 73 2e 20 20 5e 41 20 57 41 4c 20 61 6c  ones.  ^A WAL al
13420 77 61 79 73 20 67 72 6f 77 73 20 66 72 6f 6d 20  ways grows from 
13430 62 65 67 69 6e 6e 69 6e 67 0a 74 6f 77 61 72 64  beginning.toward
13440 20 74 68 65 20 65 6e 64 2e 20 20 43 68 65 63 6b   the end.  Check
13450 73 75 6d 73 20 61 6e 64 20 63 6f 75 6e 74 65 72  sums and counter
13460 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 65 61  s attached to ea
13470 63 68 20 66 72 61 6d 65 20 61 72 65 0a 75 73 65  ch frame are.use
13480 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  d to determine w
13490 68 69 63 68 20 66 72 61 6d 65 73 20 77 69 74 68  hich frames with
134a0 69 6e 20 74 68 65 20 57 41 4c 20 61 72 65 20 76  in the WAL are v
134b0 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68 0a 61  alid and which.a
134c0 72 65 20 6c 65 66 74 6f 76 65 72 73 20 66 72 6f  re leftovers fro
134d0 6d 20 70 72 69 6f 72 20 63 68 65 63 6b 70 6f 69  m prior checkpoi
134e0 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  nts.</p>..<p>^(T
134f0 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 69 73  he WAL header is
13500 20 33 32 20 62 79 74 65 73 20 69 6e 20 73 69 7a   32 bytes in siz
13510 65 20 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f  e and consists o
13520 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13530 65 69 67 68 74 0a 62 69 67 2d 65 6e 64 69 61 6e  eight.big-endian
13540 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64   32-bit unsigned
13550 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 3a   integer values:
13560 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  </p>..<center>.<
13570 69 3e 57 41 4c 20 48 65 61 64 65 72 20 46 6f 72  i>WAL Header For
13580 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
13590 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
135a0 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
135b0 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
135c0 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
135d0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
135e0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
135f0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13600 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13610 20 20 3c 74 64 3e 4d 61 67 69 63 20 6e 75 6d 62    <td>Magic numb
13620 65 72 2e 20 20 30 78 33 37 37 66 30 36 38 32 20  er.  0x377f0682 
13630 6f 72 20 30 78 33 37 37 66 30 36 38 33 0a 3c 74  or 0x377f0683.<t
13640 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13650 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
13660 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13670 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
13680 20 3c 74 64 3e 46 69 6c 65 20 66 6f 72 6d 61 74   <td>File format
13690 20 76 65 72 73 69 6f 6e 2e 20 20 43 75 72 72 65   version.  Curre
136a0 6e 74 6c 79 20 33 30 30 37 30 30 30 2e 0a 3c 74  ntly 3007000..<t
136b0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
136c0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c   align=center>8<
136d0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
136e0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
136f0 20 3c 74 64 3e 44 61 74 61 62 61 73 65 20 70 61   <td>Database pa
13700 67 65 20 73 69 7a 65 2e 20 20 45 78 61 6d 70 6c  ge size.  Exampl
13710 65 3a 20 31 30 32 34 0a 3c 74 72 3e 3c 74 64 20  e: 1024.<tr><td 
13720 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13730 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61  =center>12<td va
13740 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13750 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13760 43 68 65 63 6b 70 6f 69 6e 74 20 73 65 71 75 65  Checkpoint seque
13770 6e 63 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  nce number.<tr><
13780 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13790 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64  ign=center>16<td
137a0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
137b0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
137c0 74 64 3e 53 61 6c 74 2d 31 3a 20 72 61 6e 64 6f  td>Salt-1: rando
137d0 6d 20 69 6e 74 65 67 65 72 20 69 6e 63 72 65 6d  m integer increm
137e0 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
137f0 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c  checkpoint.<tr><
13800 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13810 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64  ign=center>20<td
13820 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13830 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
13840 74 64 3e 53 61 6c 74 2d 32 3a 20 61 20 64 69 66  td>Salt-2: a dif
13850 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 75  ferent random nu
13860 6d 62 65 72 20 66 6f 72 20 65 61 63 68 20 63 68  mber for each ch
13870 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64  eckpoint.<tr><td
13880 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13890 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64 20 76  n=center>24<td v
138a0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
138b0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
138c0 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 46 69 72  >Checksum-1: Fir
138d0 73 74 20 70 61 72 74 20 6f 66 20 61 20 63 68 65  st part of a che
138e0 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72  cksum on the fir
138f0 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 68  st 24 bytes of h
13900 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  eader.<tr><td va
13910 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13920 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69  enter>28<td vali
13930 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13940 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
13950 65 63 6b 73 75 6d 2d 32 3a 20 53 65 63 6f 6e 64  ecksum-2: Second
13960 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 68 65   part of the che
13970 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72  cksum on the fir
13980 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 68  st 24 bytes of h
13990 65 61 64 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  eader.</table>.<
139a0 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e  /center>)^..<p>^
139b0 49 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  Immediately foll
139c0 6f 77 69 6e 67 20 74 68 65 20 77 61 6c 2d 68 65  owing the wal-he
139d0 61 64 65 72 20 61 72 65 20 7a 65 72 6f 20 6f 72  ader are zero or
139e0 20 6d 6f 72 65 20 66 72 61 6d 65 73 2e 20 5e 45   more frames. ^E
139f0 61 63 68 0a 66 72 61 6d 65 20 63 6f 6e 73 69 73  ach.frame consis
13a00 74 73 20 6f 66 20 61 20 32 34 2d 62 79 74 65 20  ts of a 24-byte 
13a10 66 72 61 6d 65 2d 68 65 61 64 65 72 20 66 6f 6c  frame-header fol
13a20 6c 6f 77 65 64 20 62 79 20 61 20 3c 69 3e 70 61  lowed by a <i>pa
13a30 67 65 2d 73 69 7a 65 3c 2f 69 3e 20 62 79 74 65  ge-size</i> byte
13a40 73 0a 6f 66 20 70 61 67 65 20 64 61 74 61 2e 20  s.of page data. 
13a50 5e 28 54 68 65 20 66 72 61 6d 65 2d 68 65 61 64  ^(The frame-head
13a60 65 72 20 69 73 20 73 69 78 20 62 69 67 2d 65 6e  er is six big-en
13a70 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69  dian 32-bit unsi
13a80 67 6e 65 64 20 0a 69 6e 74 65 67 65 72 20 76 61  gned .integer va
13a90 6c 75 65 73 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  lues, as follows
13aa0 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57  :..<center>.<i>W
13ab0 41 4c 20 46 72 61 6d 65 20 48 65 61 64 65 72 20  AL Frame Header 
13ac0 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
13ad0 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
13ae0 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
13af0 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
13b00 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
13b10 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  n.<tr><td valign
13b20 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13b30 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>0<td valign=to
13b40 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13b50 0a 20 20 20 20 3c 74 64 3e 50 61 67 65 20 6e 75  .    <td>Page nu
13b60 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  mber.<tr><td val
13b70 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13b80 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e  nter>4<td valign
13b90 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13ba0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 6f 72 20  r>4.    <td>For 
13bb0 63 6f 6d 6d 69 74 20 72 65 63 6f 72 64 73 2c 20  commit records, 
13bc0 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
13bd0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e  database file in
13be0 20 70 61 67 65 73 0a 20 20 20 20 20 20 20 20 61   pages.        a
13bf0 66 74 65 72 20 74 68 65 20 63 6f 6d 6d 69 74 2e  fter the commit.
13c00 20 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20    For all other 
13c10 72 65 63 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a 3c  records, zero..<
13c20 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13c30 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
13c40 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13c50 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13c60 20 20 3c 74 64 3e 53 61 6c 74 2d 31 20 63 6f 70    <td>Salt-1 cop
13c70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c  ied from the WAL
13c80 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20   header.<tr><td 
13c90 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13ca0 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61  =center>12<td va
13cb0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13cc0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13cd0 53 61 6c 74 2d 32 20 63 6f 70 69 65 64 20 66 72  Salt-2 copied fr
13ce0 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  om the WAL heade
13cf0 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
13d00 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13d10 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>16<td valign=t
13d20 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13d30 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73  4.    <td>Checks
13d40 75 6d 2d 31 3a 20 20 43 75 6d 75 6c 61 74 69 76  um-1:  Cumulativ
13d50 65 20 63 68 65 63 6b 73 75 6d 20 75 70 20 74 68  e checksum up th
13d60 72 6f 75 67 68 20 61 6e 64 20 69 6e 63 6c 75 64  rough and includ
13d70 69 6e 67 20 74 68 69 73 20 70 61 67 65 0a 3c 74  ing this page.<t
13d80 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13d90 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30   align=center>20
13da0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13db0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13dc0 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32    <td>Checksum-2
13dd0 3a 20 20 53 65 63 6f 6e 64 20 68 61 6c 66 20 6f  :  Second half o
13de0 66 20 74 68 65 20 63 75 6d 75 6c 61 74 69 76 65  f the cumulative
13df0 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61 62   checksum..</tab
13e00 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  le>.</center>)^.
13e10 0a 5e 28 3c 70 3e 41 20 66 72 61 6d 65 20 69 73  .^(<p>A frame is
13e20 20 63 6f 6e 73 69 64 65 72 65 64 20 76 61 6c 69   considered vali
13e30 64 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  d if and only if
13e40 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
13e50 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 0a 74 72  onditions are.tr
13e60 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ue:</p>..<ol>.<l
13e70 69 3e 3c 70 3e 54 68 65 20 73 61 6c 74 2d 31 20  i><p>The salt-1 
13e80 61 6e 64 20 73 61 6c 74 2d 32 20 76 61 6c 75 65  and salt-2 value
13e90 73 20 69 6e 20 74 68 65 20 66 72 61 6d 65 2d 68  s in the frame-h
13ea0 65 61 64 65 72 20 6d 61 74 63 68 0a 20 20 20 20  eader match.    
13eb0 20 20 20 73 61 6c 74 20 76 61 6c 75 65 73 20 69     salt values i
13ec0 6e 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72  n the wal-header
13ed0 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
13ee0 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76  p>The checksum v
13ef0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 69 6e  alues in the fin
13f00 61 6c 20 38 20 62 79 74 65 73 20 6f 66 20 74 68  al 8 bytes of th
13f10 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 0a 20  e frame-header. 
13f20 20 20 20 20 20 20 65 78 61 63 74 6c 79 20 6d 61        exactly ma
13f30 74 63 68 20 74 68 65 20 63 68 65 63 6b 73 75 6d  tch the checksum
13f40 20 63 6f 6d 70 75 74 65 64 20 63 6f 6e 73 65 63   computed consec
13f50 75 74 69 76 65 6c 79 20 6f 6e 20 74 68 65 0a 20  utively on the. 
13f60 20 20 20 20 20 20 66 69 72 73 74 20 32 34 20 62        first 24 b
13f70 79 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c 20  ytes of the WAL 
13f80 68 65 61 64 65 72 20 61 6e 64 20 74 68 65 20 66  header and the f
13f90 69 72 73 74 20 38 20 62 79 74 65 73 20 61 6e 64  irst 8 bytes and
13fa0 0a 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e 74  .       the cont
13fb0 65 6e 74 20 6f 66 20 61 6c 6c 20 66 72 61 6d 65  ent of all frame
13fc0 73 0a 20 20 20 20 20 20 20 75 70 20 74 6f 20 61  s.       up to a
13fd0 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65  nd including the
13fe0 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 2e 3c   current frame.<
13ff0 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f  /p></li></li>.</
14000 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ol>)^..<tcl>hd_f
14010 72 61 67 6d 65 6e 74 20 77 61 6c 63 6b 73 6d 20  ragment walcksm 
14020 7b 57 41 4c 20 63 68 65 63 6b 73 75 6d 20 61 6c  {WAL checksum al
14030 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c  gorithm}</tcl>.<
14040 68 33 3e 34 2e 32 20 43 68 65 63 6b 73 75 6d 20  h3>4.2 Checksum 
14050 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a  Algorithm</h3>..
14060 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  <p>The checksum 
14070 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 69  is computed by i
14080 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68 65 20  nterpreting the 
14090 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76 65 6e  input as.an even
140a0 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73 69 67   number of unsig
140b0 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67  ned 32-bit integ
140c0 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f 75 67  ers: x(0) throug
140d0 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33 32 2d  h x(N)..^The 32-
140e0 62 69 74 20 69 6e 74 65 67 65 72 73 20 61 72 65  bit integers are
140f0 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66 20 74   big-endian if t
14100 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65 72 20  he.magic number 
14110 69 6e 20 74 68 65 20 66 69 72 73 74 20 34 20 62  in the first 4 b
14120 79 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c 20  ytes of the WAL 
14130 68 65 61 64 65 72 20 69 73 20 30 78 33 37 37 66  header is 0x377f
14140 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69 6e 74  0683 and.the int
14150 65 67 65 72 73 20 61 72 65 20 6c 69 74 74 6c 65  egers are little
14160 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65 20 6d  -endian if the m
14170 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73 20 30  agic number is 0
14180 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68 65 20  x377f0682..^The 
14190 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20  checksum values 
141a0 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f 72 65  are always store
141b0 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65 20 68  d in the frame h
141c0 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67 2d 65  eader in a.big-e
141d0 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72 65 67  ndian format reg
141e0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69 63 68  ardless of which
141f0 20 62 79 74 65 20 6f 72 64 65 72 20 69 73 20 75   byte order is u
14200 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74  sed to compute.t
14210 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f 70 3e  he checksum.</p>
14220 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
14230 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c 79  m algorithm only
14240 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e 74 65   works for conte
14250 6e 74 20 77 68 69 63 68 20 69 73 20 61 20 6d 75  nt which is a mu
14260 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79 74 65  ltiple of.8 byte
14270 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 49 6e  s in length.  In
14280 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
14290 20 74 68 65 20 69 6e 70 75 74 73 20 61 72 65 20   the inputs are 
142a0 78 28 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e  x(0) through x(N
142b0 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20 62 65  ).then N must be
142c0 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68 65 63   odd..^(The chec
142d0 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 69  ksum algorithm i
142e0 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  s as follows:..<
142f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
14300 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a 66 6f   .s0 = s1 = 0.fo
14310 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20 6e 2d  r i from 0 to n-
14320 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73 30 20  1 step 2:.   s0 
14330 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a 20 20  += x(i) + s1;.  
14340 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20 2b 20   s1 += x(i+1) + 
14350 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72 65 73  s0;.endfor.# res
14360 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20 73 31  ult in s0 and s1
14370 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
14380 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20  ote>)^..<p>^The 
14390 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64 20 73  outputs s0 and s
143a0 31 20 61 72 65 20 62 6f 74 68 20 77 65 69 67 68  1 are both weigh
143b0 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20 75 73  ted checksums us
143c0 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20 77 65  ing Fibonacci we
143d0 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72 73 65  ights.in reverse
143e0 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65 20 6c   order.  (^The l
143f0 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63 63 69  argest Fibonacci
14400 20 77 65 69 67 68 74 20 6f 63 63 75 72 73 20 6f   weight occurs o
14410 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  n the first elem
14420 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71 75 65  ent.of the seque
14430 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d 65 64  nce being summed
14440 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61 6c 75  .)  ^The s1 valu
14450 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32 2d 62  e spans all 32-b
14460 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72 6d 73  it integer.terms
14470 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   of the sequence
14480 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d 69 74   whereas s0 omit
14490 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65 72 6d  s the final term
144a0 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 33 20 43  .</p>..<h3>4.3 C
144b0 68 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69  heckpoint Algori
144c0 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 4f 6e  thm</h3>..<p>^On
144d0 20 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c   a [checkpoint],
144e0 20 74 68 65 20 57 41 4c 20 69 73 20 66 69 72 73   the WAL is firs
144f0 74 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72  t flushed to per
14500 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20  sistent storage 
14510 75 73 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20  using.the xSync 
14520 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73  method of the [s
14530 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64  qlite3_io_method
14540 73 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e  s | VFS]. .^Then
14550 20 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f   valid content o
14560 66 20 74 68 65 20 57 41 4c 20 69 73 20 74 72 61  f the WAL is tra
14570 6e 73 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68  nsferred into th
14580 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
14590 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64  .^Finally, the d
145a0 61 74 61 62 61 73 65 20 69 73 20 66 6c 75 73 68  atabase is flush
145b0 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74  ed to persistent
145c0 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61   storage using a
145d0 6e 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74  nother.xSync met
145e0 68 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53  hod call..The xS
145f0 79 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73  ync operations s
14600 65 72 76 65 20 61 73 20 77 72 69 74 65 20 62 61  erve as write ba
14610 72 72 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69  rriers - all wri
14620 74 65 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66  tes launched.bef
14630 6f 72 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75  ore the xSync mu
14640 73 74 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f  st complete befo
14650 72 65 20 61 6e 79 20 77 72 69 74 65 20 74 68 61  re any write tha
14660 74 20 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72  t launches after
14670 20 74 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e   the.xSync begin
14680 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65  s.</p>..<p>^Afte
14690 72 20 61 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20  r a checkpoint, 
146a0 6e 65 77 20 77 72 69 74 65 20 74 72 61 6e 73 61  new write transa
146b0 63 74 69 6f 6e 73 20 6f 76 65 72 77 72 69 74 65  ctions overwrite
146c0 0a 74 68 65 20 57 41 4c 20 66 69 6c 65 20 66 72  .the WAL file fr
146d0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
146e0 2e 20 20 5e 41 74 20 74 68 65 20 73 74 61 72 74  .  ^At the start
146f0 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 6e 65   of the first ne
14700 77 0a 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  w.write transact
14710 69 6f 6e 2c 20 74 68 65 20 57 41 4c 20 68 65 61  ion, the WAL hea
14720 64 65 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65  der salt-1 value
14730 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 0a   is incremented.
14740 61 6e 64 20 74 68 65 20 73 61 6c 74 2d 32 20 76  and the salt-2 v
14750 61 6c 75 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a  alue is randomiz
14760 65 64 2e 20 20 54 68 65 73 65 20 63 68 61 6e 67  ed.  These chang
14770 65 73 20 74 6f 20 74 68 65 20 73 61 6c 74 73 20  es to the salts 
14780 69 6e 76 61 6c 69 64 61 74 65 0a 6f 6c 64 20 66  invalidate.old f
14790 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c  rames in the WAL
147a0 20 74 68 61 74 20 68 61 76 65 20 61 6c 72 65 61   that have alrea
147b0 64 79 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  dy been checkpoi
147c0 6e 74 65 64 20 62 75 74 20 6e 6f 74 20 79 65 74  nted but not yet
147d0 0a 6f 76 65 72 77 72 69 74 74 65 6e 2c 20 61 6e  .overwritten, an
147e0 64 20 70 72 65 76 65 6e 74 20 74 68 65 6d 20 66  d prevent them f
147f0 72 6f 6d 20 62 65 69 6e 67 20 63 68 65 63 6b 70  rom being checkp
14800 6f 69 6e 74 65 64 20 61 67 61 69 6e 2e 3c 2f 70  ointed again.</p
14810 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
14820 65 6e 74 20 77 61 6c 72 65 61 64 20 7b 57 41 4c  ent walread {WAL
14830 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d   read algorithm}
14840 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 34 20 52  </tcl>.<h3>4.4 R
14850 65 61 64 65 72 20 41 6c 67 6f 72 69 74 68 6d 3c  eader Algorithm<
14860 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72 65  /h3>..<p>^(To re
14870 61 64 20 61 20 70 61 67 65 20 66 72 6f 6d 20 74  ad a page from t
14880 68 65 20 64 61 74 61 62 61 73 65 20 28 63 61 6c  he database (cal
14890 6c 20 69 74 20 70 61 67 65 20 6e 75 6d 62 65 72  l it page number
148a0 20 50 29 2c 20 61 20 72 65 61 64 65 72 0a 66 69   P), a reader.fi
148b0 72 73 74 20 63 68 65 63 6b 73 20 74 68 65 20 57  rst checks the W
148c0 41 4c 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  AL to see if it 
148d0 63 6f 6e 74 61 69 6e 73 20 70 61 67 65 20 50 2e  contains page P.
148e0 20 20 49 66 20 73 6f 2c 20 74 68 65 6e 20 74 68    If so, then th
148f0 65 0a 6c 61 73 74 20 76 61 6c 69 64 20 69 6e 73  e.last valid ins
14900 74 61 6e 63 65 20 6f 66 20 70 61 67 65 20 50 20  tance of page P 
14910 74 68 61 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64  that is followed
14920 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61   by a commit fra
14930 6d 65 0a 6f 72 20 69 73 20 61 20 63 6f 6d 6d 69  me.or is a commi
14940 74 20 66 72 61 6d 65 20 69 74 73 65 6c 66 20 62  t frame itself b
14950 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c 75 65  ecomes the value
14960 20 72 65 61 64 2e 29 5e 20 20 5e 49 66 20 74 68   read.)^  ^If th
14970 65 20 57 41 4c 0a 63 6f 6e 74 61 69 6e 73 20 6e  e WAL.contains n
14980 6f 20 63 6f 70 69 65 73 20 6f 66 20 70 61 67 65  o copies of page
14990 20 50 20 74 68 61 74 20 61 72 65 20 76 61 6c 69   P that are vali
149a0 64 20 61 6e 64 20 77 68 69 63 68 20 61 72 65 20  d and which are 
149b0 61 20 63 6f 6d 6d 69 74 0a 66 72 61 6d 65 20 6f  a commit.frame o
149c0 72 20 61 72 65 20 66 6f 6c 6c 6f 77 65 64 20 62  r are followed b
149d0 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65  y a commit frame
149e0 2c 20 74 68 65 6e 20 70 61 67 65 20 50 20 69 73  , then page P is
149f0 20 72 65 61 64 20 66 72 6f 6d 0a 74 68 65 20 64   read from.the d
14a00 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
14a10 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61 72 74 20 61  >..<p>To start a
14a20 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69 6f   read transactio
14a30 6e 2c 20 74 68 65 20 72 65 61 64 65 72 20 72 65  n, the reader re
14a40 63 6f 72 64 73 20 74 68 65 20 69 6e 64 65 78 20  cords the index 
14a50 6f 66 20 74 68 65 20 6c 61 73 74 0a 76 61 6c 69  of the last.vali
14a60 64 20 66 72 61 6d 65 20 69 6e 20 74 68 65 20 57  d frame in the W
14a70 41 4c 2e 20 20 54 68 65 20 72 65 61 64 65 72 20  AL.  The reader 
14a80 75 73 65 73 20 74 68 69 73 20 72 65 63 6f 72 64  uses this record
14a90 65 64 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c  ed "mxFrame" val
14aa0 75 65 0a 66 6f 72 20 61 6c 6c 20 73 75 62 73 65  ue.for all subse
14ab0 71 75 65 6e 74 20 72 65 61 64 20 6f 70 65 72 61  quent read opera
14ac0 74 69 6f 6e 73 2e 20 20 4e 65 77 20 74 72 61 6e  tions.  New tran
14ad0 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
14ae0 61 70 70 65 6e 64 65 64 0a 74 6f 20 74 68 65 20  appended.to the 
14af0 57 41 4c 2c 20 62 75 74 20 61 73 20 6c 6f 6e 67  WAL, but as long
14b00 20 61 73 20 74 68 65 20 72 65 61 64 65 72 20 75   as the reader u
14b10 73 65 73 20 69 74 73 20 6f 72 69 67 69 6e 61 6c  ses its original
14b20 20 6d 78 46 72 61 6d 65 20 76 61 6c 75 65 0a 61   mxFrame value.a
14b30 6e 64 20 69 67 6e 6f 72 65 73 20 73 75 62 73 65  nd ignores subse
14b40 71 75 65 6e 74 6c 79 20 61 70 70 65 6e 64 65 64  quently appended
14b50 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65 20 72 65   content, the re
14b60 61 64 65 72 20 77 69 6c 6c 20 73 65 65 20 61 20  ader will see a 
14b70 0a 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e 61 70  .consistent snap
14b80 73 68 6f 74 20 6f 66 20 74 68 65 20 64 61 74 61  shot of the data
14b90 62 61 73 65 20 66 72 6f 6d 20 61 20 73 69 6e 67  base from a sing
14ba0 6c 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65  le point in time
14bb0 2e 20 20 0a 5e 54 68 69 73 20 74 65 63 68 6e 69  .  .^This techni
14bc0 71 75 65 20 61 6c 6c 6f 77 73 20 6d 75 6c 74 69  que allows multi
14bd0 70 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74 20 72  ple concurrent r
14be0 65 61 64 65 72 73 20 74 6f 20 76 69 65 77 20 64  eaders to view d
14bf0 69 66 66 65 72 65 6e 74 20 0a 76 65 72 73 69 6f  ifferent .versio
14c00 6e 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ns of the databa
14c10 73 65 20 63 6f 6e 74 65 6e 74 20 73 69 6d 75 6c  se content simul
14c20 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f 70 3e 0a 0a  taneously.</p>..
14c30 3c 70 3e 54 68 65 20 72 65 61 64 65 72 20 61 6c  <p>The reader al
14c40 67 6f 72 69 74 68 6d 20 69 6e 20 74 68 65 20 70  gorithm in the p
14c50 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
14c60 68 73 20 77 6f 72 6b 73 20 63 6f 72 72 65 63 74  hs works correct
14c70 6c 79 2c 20 62 75 74 20 0a 62 65 63 61 75 73 65  ly, but .because
14c80 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65   frames for page
14c90 20 50 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e   P can appear an
14ca0 79 77 68 65 72 65 20 77 69 74 68 69 6e 20 74 68  ywhere within th
14cb0 65 20 57 41 4c 2c 20 74 68 65 0a 72 65 61 64 65  e WAL, the.reade
14cc0 72 20 68 61 73 20 74 6f 20 73 63 61 6e 20 74 68  r has to scan th
14cd0 65 20 65 6e 74 69 72 65 20 57 41 4c 20 6c 6f 6f  e entire WAL loo
14ce0 6b 69 6e 67 20 66 6f 72 20 70 61 67 65 20 50 20  king for page P 
14cf0 66 72 61 6d 65 73 2e 20 20 49 66 20 74 68 65 0a  frames.  If the.
14d00 57 41 4c 20 69 73 20 6c 61 72 67 65 20 28 6d 75  WAL is large (mu
14d10 6c 74 69 70 6c 65 20 6d 65 67 61 62 79 74 65 73  ltiple megabytes
14d20 20 69 73 20 74 79 70 69 63 61 6c 29 20 74 68 61   is typical) tha
14d30 74 20 73 63 61 6e 20 63 61 6e 20 62 65 20 73 6c  t scan can be sl
14d40 6f 77 2c 0a 61 6e 64 20 72 65 61 64 20 70 65 72  ow,.and read per
14d50 66 6f 72 6d 61 6e 63 65 20 73 75 66 66 65 72 73  formance suffers
14d60 2e 20 20 5e 54 6f 20 6f 76 65 72 63 6f 6d 65 20  .  ^To overcome 
14d70 74 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20 61 20  this problem, a 
14d80 73 65 70 61 72 61 74 65 0a 64 61 74 61 20 73 74  separate.data st
14d90 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20 74  ructure called t
14da0 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
14db0 6d 61 69 6e 74 61 69 6e 65 64 20 74 6f 20 65 78  maintained to ex
14dc0 70 65 64 69 74 65 20 74 68 65 0a 73 65 61 72 63  pedite the.searc
14dd0 68 20 66 6f 72 20 66 72 61 6d 65 73 20 6f 66 20  h for frames of 
14de0 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 61 67  a particular pag
14df0 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
14e00 66 72 61 67 6d 65 6e 74 20 77 61 6c 69 6e 64 65  fragment walinde
14e10 78 66 6f 72 6d 61 74 20 7b 77 61 6c 2d 69 6e 64  xformat {wal-ind
14e20 65 78 7d 20 7b 57 41 4c 2d 69 6e 64 65 78 20 66  ex} {WAL-index f
14e30 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ormat}</tcl>.<h3
14e40 3e 34 2e 35 20 57 41 4c 2d 49 6e 64 65 78 20 46  >4.5 WAL-Index F
14e50 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 43  ormat</h3>..<p>C
14e60 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65  onceptually, the
14e70 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73 68   wal-index is sh
14e80 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 74 68 6f  ared memory, tho
14e90 75 67 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a  ugh the current.
14ea0 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  VFS implementati
14eb0 6f 6e 73 20 75 73 65 20 61 20 6d 6d 61 70 70 65  ons use a mmappe
14ec0 64 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 77  d file for the w
14ed0 61 6c 2d 69 6e 64 65 78 2e 20 20 5e 54 68 65 20  al-index.  ^The 
14ee0 6d 6d 61 70 70 65 64 0a 66 69 6c 65 20 69 73 20  mmapped.file is 
14ef0 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72 65  in the same dire
14f00 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74  ctory as the dat
14f10 61 62 61 73 65 20 61 6e 64 20 68 61 73 20 74 68  abase and has th
14f20 65 20 73 61 6d 65 20 6e 61 6d 65 0a 61 73 20 74  e same name.as t
14f30 68 65 20 64 61 74 61 62 61 73 65 20 77 69 74 68  he database with
14f40 20 61 20 22 3c 74 74 3e 2d 73 68 6d 3c 2f 74 74   a "<tt>-shm</tt
14f50 3e 22 20 73 75 66 66 69 78 20 61 70 70 65 6e 64  >" suffix append
14f60 65 64 2e 20 20 42 65 63 61 75 73 65 0a 74 68 65  ed.  Because.the
14f70 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73 68   wal-index is sh
14f80 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 53 51 4c  ared memory, SQL
14f90 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ite does not sup
14fa0 70 6f 72 74 20 0a 5b 50 52 41 47 4d 41 20 6a 6f  port .[PRAGMA jo
14fb0 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c 20 6a 6f 75  urnal_mode | jou
14fc0 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 5d 20 0a  rnal_mode=WAL] .
14fd0 6f 6e 20 61 20 6e 65 74 77 6f 72 6b 20 66 69 6c  on a network fil
14fe0 65 73 79 73 74 65 6d 20 77 68 65 6e 20 63 6c 69  esystem when cli
14ff0 65 6e 74 73 20 61 72 65 20 6f 6e 20 64 69 66 66  ents are on diff
15000 65 72 65 6e 74 20 6d 61 63 68 69 6e 65 73 2e 0a  erent machines..
15010 41 6c 6c 20 75 73 65 72 73 20 6f 66 20 74 68 65  All users of the
15020 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20 62   database must b
15030 65 20 61 62 6c 65 20 74 6f 20 73 68 61 72 65 20  e able to share 
15040 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 2e  the same memory.
15050 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 70 75 72  </p>..<p>The pur
15060 70 6f 73 65 20 6f 66 20 74 68 65 20 77 61 6c 2d  pose of the wal-
15070 69 6e 64 65 78 20 69 73 20 74 6f 20 61 6e 73 77  index is to answ
15080 65 72 20 74 68 69 73 20 71 75 65 73 74 69 6f 6e  er this question
15090 20 71 75 69 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c   quickly:</p>..<
150a0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a 47  blockquote><i>.G
150b0 69 76 65 6e 20 61 20 70 61 67 65 20 6e 75 6d 62  iven a page numb
150c0 65 72 20 50 20 61 6e 64 20 61 20 6d 61 78 69 6d  er P and a maxim
150d0 75 6d 20 57 41 4c 20 66 72 61 6d 65 20 69 6e 64  um WAL frame ind
150e0 65 78 20 4d 2c 0a 72 65 74 75 72 6e 20 74 68 65  ex M,.return the
150f0 20 6c 61 72 67 65 73 74 20 57 41 4c 20 66 72 61   largest WAL fra
15100 6d 65 20 69 6e 64 65 78 20 66 6f 72 20 70 61 67  me index for pag
15110 65 20 50 20 74 68 61 74 20 64 6f 65 73 20 6e 6f  e P that does no
15120 74 20 65 78 63 65 65 64 20 4d 2c 20 0a 6f 72 20  t exceed M, .or 
15130 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74  return NULL if t
15140 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 61 6d  here are no fram
15150 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 74 68  es for page P th
15160 61 74 20 64 6f 20 6e 6f 74 20 65 78 63 65 65 64  at do not exceed
15170 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71   M..</i></blockq
15180 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 3c 69  uote>..<p>The <i
15190 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65 20 69 6e 20  >M</i> value in 
151a0 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72  the previous par
151b0 61 67 72 61 70 68 20 69 73 20 74 68 65 20 22 6d  agraph is the "m
151c0 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 64 65  xFrame" value.de
151d0 66 69 6e 65 64 20 69 6e 20 5b 57 41 4c 20 72 65  fined in [WAL re
151e0 61 64 20 61 6c 67 6f 72 69 74 68 6d 20 7c 20 73  ad algorithm | s
151f0 65 63 74 69 6f 6e 20 34 2e 34 5d 20 74 68 61 74  ection 4.4] that
15200 20 69 73 20 72 65 61 64 20 61 74 20 74 68 65 20   is read at the 
15210 73 74 61 72 74 20 0a 6f 66 20 61 20 74 72 61 6e  start .of a tran
15220 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 68 69 63  saction and whic
15230 68 20 64 65 66 69 6e 65 73 20 74 68 65 20 6d 61  h defines the ma
15240 78 69 6d 75 6d 20 66 72 61 6d 65 20 66 72 6f 6d  ximum frame from
15250 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 0a 74   the WAL that .t
15260 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 75  he reader will u
15270 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  se.</p>..<p>The 
15280 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72 61  wal-index is tra
15290 6e 73 69 65 6e 74 2e 20 20 41 66 74 65 72 20 61  nsient.  After a
152a0 20 63 72 61 73 68 2c 20 74 68 65 20 77 61 6c 2d   crash, the wal-
152b0 69 6e 64 65 78 20 69 73 0a 72 65 63 6f 6e 73 74  index is.reconst
152c0 72 75 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20  ructed from the 
152d0 6f 72 69 67 69 6e 61 6c 20 57 41 4c 20 66 69 6c  original WAL fil
152e0 65 2e 20 20 5e 54 68 65 20 56 46 53 20 69 73 20  e.  ^The VFS is 
152f0 72 65 71 75 69 72 65 64 0a 74 6f 20 65 69 74 68  required.to eith
15300 65 72 20 74 72 75 6e 63 61 74 65 20 6f 72 20 7a  er truncate or z
15310 65 72 6f 20 74 68 65 20 68 65 61 64 65 72 20 6f  ero the header o
15320 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  f the wal-index 
15330 77 68 65 6e 20 74 68 65 20 6c 61 73 74 0a 63 6f  when the last.co
15340 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 69 74 20 63  nnection to it c
15350 6c 6f 73 65 73 2e 20 20 42 65 63 61 75 73 65 20  loses.  Because 
15360 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  the wal-index is
15370 20 74 72 61 6e 73 69 65 6e 74 2c 20 69 74 20 63   transient, it c
15380 61 6e 0a 75 73 65 20 61 6e 20 61 72 63 68 69 74  an.use an archit
15390 65 63 74 75 72 65 2d 73 70 65 63 69 66 69 63 20  ecture-specific 
153a0 66 6f 72 6d 61 74 3b 20 69 74 20 64 6f 65 73 20  format; it does 
153b0 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20 63  not have to be c
153c0 72 6f 73 73 2d 70 6c 61 74 66 6f 72 6d 2e 0a 48  ross-platform..H
153d0 65 6e 63 65 2c 20 75 6e 6c 69 6b 65 20 74 68 65  ence, unlike the
153e0 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 57 41   database and WA
153f0 4c 20 66 69 6c 65 20 66 6f 72 6d 61 74 73 20 77  L file formats w
15400 68 69 63 68 20 73 74 6f 72 65 20 61 6c 6c 20 76  hich store all v
15410 61 6c 75 65 73 0a 61 73 20 62 69 67 20 65 6e 64  alues.as big end
15420 69 61 6e 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64  ian, the wal-ind
15430 65 78 20 73 74 6f 72 65 73 20 6d 75 6c 74 69 2d  ex stores multi-
15440 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74  byte values in t
15450 68 65 20 6e 61 74 69 76 65 0a 62 79 74 65 20 6f  he native.byte o
15460 72 64 65 72 20 6f 66 20 74 68 65 20 68 6f 73 74  rder of the host
15470 20 63 6f 6d 70 75 74 65 72 2e 3c 2f 70 3e 0a 0a   computer.</p>..
15480 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e 74  <p>This document
15490 20 69 73 20 63 6f 6e 63 65 72 6e 65 64 20 77 69   is concerned wi
154a0 74 68 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  th the persisten
154b0 74 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64  t state of the d
154c0 61 74 61 62 61 73 65 0a 66 69 6c 65 2c 20 61 6e  atabase.file, an
154d0 64 20 73 69 6e 63 65 20 74 68 65 20 77 61 6c 2d  d since the wal-
154e0 69 6e 64 65 78 20 69 73 20 61 20 74 72 61 6e 73  index is a trans
154f0 69 65 6e 74 20 73 74 72 75 63 74 75 72 65 2c 20  ient structure, 
15500 6e 6f 20 66 75 72 74 68 65 72 20 0a 69 6e 66 6f  no further .info
15510 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
15520 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
15530 77 61 6c 2d 69 6e 64 65 78 20 77 69 6c 6c 20 62  wal-index will b
15540 65 20 70 72 6f 76 69 64 65 64 20 68 65 72 65 2e  e provided here.
15550 0a 43 6f 6d 70 6c 65 74 65 20 64 65 74 61 69 6c  .Complete detail
15560 73 20 6f 6e 20 74 68 65 20 66 6f 72 6d 61 74 20  s on the format 
15570 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
15580 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
15590 69 74 68 69 6e 0a 63 6f 6d 6d 65 6e 74 73 20 69  ithin.comments i
155a0 6e 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20  n SQLite source 
155b0 63 6f 64 65 2e 3c 2f 70 3e 0a                    code.</p>.