Documentation Source Text

Hex Artifact Content
Login

Artifact 41b05a55825c67471d492a17ef49b3c58dded663:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c 65 74  ..<p>The complet
0140: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0150: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
0160: 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61 69 6e   usually.contain
0170: 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  ed a single file
0180: 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65 64 20   on disk called 
0190: 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61 62 61  the "main databa
01a0: 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c  se file".</p>..<
01b0: 70 3e 44 75 72 69 6e 67 20 61 20 74 72 61 6e 73  p>During a trans
01c0: 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20 73  action, SQLite s
01d0: 74 6f 72 65 73 20 61 64 64 69 74 69 6f 6e 61 6c  tores additional
01e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 0a 69 6e   information .in
01f0: 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65 20 63   a second file c
0200: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c 6c 62  alled the "rollb
0210: 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2c 20 6f 72  ack journal", or
0220: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
0230: 0a 5b 57 41 4c 20 6d 6f 64 65 5d 2c 20 61 20 77  .[WAL mode], a w
0240: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
0250: 69 6c 65 2e 0a 49 66 20 74 68 65 20 61 70 70 6c  ile..If the appl
0260: 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20  ication or.host 
0270: 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73  computer crashes
0280: 20 62 65 66 6f 72 65 20 74 68 65 20 74 72 61 6e   before the tran
0290: 73 61 63 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65  saction complete
02a0: 73 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c  s, then the roll
02b0: 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
02c0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
02d0: 63 6f 6e 74 61 69 6e 73 20 63 72 69 74 69 63 61  contains critica
02e0: 6c 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  l state informat
02f0: 69 6f 6e 20 6e 65 65 64 65 64 20 0a 74 6f 20 72  ion needed .to r
0300: 65 73 74 6f 72 65 20 74 68 65 20 6d 61 69 6e 20  estore the main 
0310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
0320: 20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   a consistent st
0330: 61 74 65 2e 20 20 57 68 65 6e 20 61 20 72 6f 6c  ate.  When a rol
0340: 6c 62 61 63 6b 20 0a 6a 6f 75 72 6e 61 6c 20 6f  lback .journal o
0350: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
0360: 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  g contains infor
0370: 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79  mation necessary
0380: 20 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20   for recovering 
0390: 0a 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68  .the state of th
03a0: 65 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 79  e database, they
03b0: 20 61 72 65 20 63 61 6c 6c 65 64 20 61 20 22 68   are called a "h
03c0: 6f 74 20 6a 6f 75 72 6e 61 6c 22 20 6f 72 20 22  ot journal" or "
03d0: 68 6f 74 20 57 41 4c 20 66 69 6c 65 22 2e 0a 48  hot WAL file"..H
03e0: 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 61 6e 64 20  ot journals and 
03f0: 57 41 4c 20 66 69 6c 65 73 20 61 72 65 20 6f 6e  WAL files are on
0400: 6c 79 20 61 20 66 61 63 74 6f 72 20 64 75 72 69  ly a factor duri
0410: 6e 67 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72  ng error recover
0420: 79 0a 73 63 65 6e 61 72 69 6f 73 20 61 6e 64 20  y.scenarios and 
0430: 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c  so are uncommon,
0440: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61   but they are pa
0450: 72 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20  rt of the state 
0460: 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74  of an SQLite.dat
0470: 61 62 61 73 65 20 61 6e 64 20 73 6f 20 63 61 6e  abase and so can
0480: 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20  not be ignored. 
0490: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64   This document d
04a0: 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
04b0: 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20  t.of a rollback 
04c0: 6a 6f 75 72 6e 61 6c 20 61 6e 64 20 74 68 65 20  journal and the 
04d0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
04e0: 66 69 6c 65 2c 20 62 75 74 20 74 68 65 20 66 6f  file, but the fo
04f0: 63 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d 61  cus is.on the ma
0500: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
0510: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20 50  .</p>..<h3>1.1 P
0520: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ages</h3>..<p>Th
0530: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
0540: 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  file consists of
0550: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67   one or more pag
0560: 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  es.  ^The size o
0570: 66 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f  f a.page is a po
0580: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
0590: 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36  en 512 and 65536
05a0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c   inclusive.  All
05b0: 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68   pages within.th
05c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
05d0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a  are the same siz
05e0: 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69  e.  ^The page si
05f0: 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ze for a databas
0600: 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d  e file.is determ
0610: 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79  ined by the 2-by
0620: 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74  te integer locat
0630: 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  ed at an offset 
0640: 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d  of.16 bytes from
0650: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0660: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
0670: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67  ile.</p>..<p>Pag
0680: 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20  es are numbered 
0690: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
06a0: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  .  The maximum p
06b0: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31  age number is.21
06c0: 34 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e  47483646 (2<sup>
06d0: 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c  <small>31</small
06e0: 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54  ></sup> - 2).  T
06f0: 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a  he minimum size.
0700: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0710: 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d  is a single 512-
0720: 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d  byte page..The m
0730: 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61  aximum size data
0740: 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31  base would be 21
0750: 34 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61  47483646 pages a
0760: 74 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65  t 65536 bytes pe
0770: 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33  r.page or 140,73
0780: 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79  7,488,224,256 by
0790: 74 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74  tes (about 140 t
07a0: 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61  erabytes).  Usua
07b0: 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  lly SQLite will.
07c0: 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  hit the maximum 
07d0: 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  file size limit 
07e0: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
07f0: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20  g filesystem or 
0800: 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69  disk.hardware si
0810: 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65  ze limit long be
0820: 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73  fore it hits its
0830: 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69   own internal si
0840: 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c  ze limit.</p>..<
0850: 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c  p>In common use,
0860: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
0870: 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20  s tend to range 
0880: 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66  in size from a f
0890: 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20  ew kilobytes.to 
08a0: 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e  a few gigabytes.
08b0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
08c0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
08d0: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
08e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
08f0: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
0900: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
0910: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
0920: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
0930: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
0940: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0950: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0960: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0970: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0980: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0990: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
09a0: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
09b0: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
09c0: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
09d0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
09e0: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
09f0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0a00: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0a10: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0a20: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0a30: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0a40: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0a50: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0a60: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72  .</p>..<p>^All r
0a70: 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72  eads from and wr
0a80: 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e  ites to the main
0a90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
0aa0: 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62  egin at a page.b
0ab0: 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20  oundary and all 
0ac0: 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e  writes are an in
0ad0: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
0ae0: 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20  pages in size.  
0af0: 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20  ^Reads.are also 
0b00: 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67  usually an integ
0b10: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  er number of pag
0b20: 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68  es in size, with
0b30: 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69   the one excepti
0b40: 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65  on.that when the
0b50: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
0b60: 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66  st opened, the f
0b70: 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f  irst 100 bytes o
0b80: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
0b90: 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73  ile (the databas
0ba0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61  e file header) a
0bb0: 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62  re read as a sub
0bc0: 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e  -page size unit.
0bd0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65  </p>..<p>^Before
0be0: 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   any information
0bf0: 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66  -bearing page of
0c00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0c10: 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20   modified, .the 
0c20: 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66  original unmodif
0c30: 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  ied content of t
0c40: 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74  hat page is writ
0c50: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f  ten into the .ro
0c60: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
0c70: 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   If a transactio
0c80: 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  n is interrupted
0c90: 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65   and needs to be
0ca0: 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74   .rolled back, t
0cb0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
0cc0: 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20  nal can then be 
0cd0: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
0ce0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
0cf0: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61  its original sta
0d00: 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c  te.  ^Freelist l
0d10: 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e  eaf pages bear n
0d20: 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  o.information th
0d30: 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f  at would need to
0d40: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20   be restored on 
0d50: 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  a rollback and s
0d60: 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77  o they.are not w
0d70: 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f  ritten to the jo
0d80: 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d  urnal prior to m
0d90: 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20  odification, in 
0da0: 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20  order to.reduce 
0db0: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
0dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0dd0: 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20  database_header 
0de0: 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72  {database header
0df0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20  }</tcl>.<h3>1.2 
0e00: 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61  The Database Hea
0e10: 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  der</h3>..<p>The
0e20: 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73   first 100 bytes
0e30: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0e40: 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74   file comprise t
0e50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0e60: 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64   .header.  The d
0e70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
0e80: 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69  der is divided i
0e90: 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68  nto fields as sh
0ea0: 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65  own by.the table
0eb0: 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c   below.  All mul
0ec0: 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e  tibyte fields in
0ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0ee0: 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74  le header are.st
0ef0: 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 6f  ored with the mo
0f00: 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  st significant b
0f10: 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65  yte first (big-e
0f20: 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65  ndian).</p>..<ce
0f30: 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73  nter>.<i>Databas
0f40: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
0f50: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
0f60: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
0f70: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
0f80: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
0f90: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
0fa0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fb0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
0fc0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
0fd0: 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c  =center>16<td al
0fe0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65  ign=left>.The he
0ff0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51  ader string: "SQ
1000: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30  Lite format 3\00
1010: 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0".<tr><td valig
1020: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1030: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
1040: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1050: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
1060: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70  >.The database p
1070: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
1080: 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f  s.  Must be a po
1090: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
10a0: 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38  en 512.and 32768
10b0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74   inclusive, or t
10c0: 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65  he value 1 repre
10d0: 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73  senting a page s
10e0: 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74  ize of 65536..<t
10f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1100: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38   align=center>18
1110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1130: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1140: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1150: 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c  ersion.  1 for l
1160: 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41  egacy; 2 for [WA
1170: 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  L]..<tr><td vali
1180: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1190: 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e  ter>19<td valign
11a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11b0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
11c0: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72  t>.File format r
11d0: 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ead version.  1 
11e0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
11f0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
1200: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1210: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
1220: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1230: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1240: 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66  n=left>.Bytes of
1250: 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65   unused "reserve
1260: 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20  d" space at the 
1270: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
1280: 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74  .  Usually 0..<t
1290: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31   align=center>21
12b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78   align=left>.Max
12e0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
12f0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
1300: 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72   Must be 64..<tr
1310: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c  align=center>22<
1330: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1340: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1350: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69  align=left>.Mini
1360: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
1370: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1380: 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e  Must be 32..<tr>
1390: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74  lign=center>23<t
13b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
13d0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20  lign=left>.Leaf 
13e0: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
13f0: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1420: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1430: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1440: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1450: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
1460: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
1470: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1480: 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
1490: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14a0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
14b0: 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61  >.Size of the da
14c0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
14d0: 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68  ages.  The "in-h
14e0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
14f0: 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ize"..<tr><td va
1500: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1510: 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69  enter>32<td vali
1520: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1530: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1540: 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72  eft>.Page number
1550: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
1560: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
1570: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1580: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1590: 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>36<td valign=
15a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
15b0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
15c0: 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  >.Total number o
15d0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
15e0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
15f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1600: 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>40<td valign=t
1610: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1620: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1630: 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .The schema cook
1640: 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ie..<tr><td vali
1650: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1660: 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e  ter>44<td valign
1670: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1680: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1690: 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  t>.The schema fo
16a0: 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75  rmat number.  Su
16b0: 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66  pported schema f
16c0: 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c  ormats are 1, 2,
16d0: 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c   3, and 4..<tr><
16e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64  ign=center>48<td
1700: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1710: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1720: 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c  ign=left>.Defaul
1730: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1740: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1750: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1760: 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>52<td valign=
1770: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1780: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1790: 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  >.The page numbe
17a0: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
17b0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
17c0: 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76  e when in auto-v
17d0: 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65  acuum or.increme
17e0: 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65  ntal-vacuum mode
17f0: 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72  s, or zero other
1800: 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  wise..<tr><td va
1810: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1820: 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69  enter>56<td vali
1830: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1840: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1850: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1860: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1870: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d    A value of 1 m
1880: 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76  eans UTF-8.  A v
1890: 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20  alue of 2.means 
18a0: 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c  UTF-16le.  A val
18b0: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
18c0: 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20  F-16be..<tr><td 
18d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18e0: 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61  =center>60<td va
18f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1900: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1910: 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72  =left>.The "user
1920: 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61   version" as rea
1930: 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65  d and set by the
1940: 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70   [user_version p
1950: 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20  ragma]..<tr><td 
1960: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1970: 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61  =center>64<td va
1980: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1990: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
19a0: 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e  =left>.True (non
19b0: 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65  -zero) for incre
19c0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
19d0: 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f  de.  False (zero
19e0: 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  ) otherwise..<tr
19f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1a00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c  align=center>68<
1a10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1a20: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a40: 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22  "Application ID"
1a50: 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41 20   set by [PRAGMA 
1a60: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 2e  application_id].
1a70: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1a80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1a90: 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >72<td valign=to
1aa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1ab0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
1ac0: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1ad0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1ae0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1af0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b00: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1b10: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1b20: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1b30: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1b40: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1b50: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><td v
1b60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b70: 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61 6c  center>96<td val
1b80: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b90: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1ba0: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1bb0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1bc0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1bd0: 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63  .<h4>1.2.1 Magic
1be0: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1bf0: 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h4>..<p>^Every v
1c00: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1c10: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1c20: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1c30: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1c40: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1c50: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1c60: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1c70: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1c80: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1c90: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1ca0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1cb0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1cc0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1cd0: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1ce0: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1cf0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32  .</p>..<h4>1.2.2
1d00: 20 50 61 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a   Page Size</h4>.
1d10: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1d20: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1d30: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1d40: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1d50: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1d60: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1d70: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1d80: 37 2e 30 2e 31 20 61 6e 64 20 65 61 72 6c 69 65  7.0.1 and earlie
1d90: 72 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  r, this value is
1da0: 20 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   .interpreted as
1db0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e   a big-endian in
1dc0: 74 65 67 65 72 20 61 6e 64 20 6d 75 73 74 20 62  teger and must b
1dd0: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1de0: 20 62 65 74 77 65 65 6e 0a 35 31 32 20 61 6e 64   between.512 and
1df0: 20 33 32 37 36 38 2c 20 69 6e 63 6c 75 73 69 76   32768, inclusiv
1e00: 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69  e.  Beginning wi
1e10: 74 68 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  th SQLite versio
1e20: 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a  n 3.7.1, a page.
1e30: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 20 62 79  size of 65536 by
1e40: 74 65 73 20 69 73 20 73 75 70 70 6f 72 74 65 64  tes is supported
1e50: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 36 35 35  .  The value 655
1e60: 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20  36 will not fit 
1e70: 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e  in a.two-byte in
1e80: 74 65 67 65 72 2c 20 73 6f 20 74 6f 20 73 70 65  teger, so to spe
1e90: 63 69 66 79 20 61 20 36 35 35 33 36 2d 62 79 74  cify a 65536-byt
1ea0: 65 20 70 61 67 65 20 73 69 7a 65 2c 20 74 68 65  e page size, the
1eb0: 20 76 61 6c 75 65 20 69 73 0a 61 74 20 6f 66 66   value is.at off
1ec0: 73 65 74 20 31 36 20 69 73 20 30 78 30 30 20 30  set 16 is 0x00 0
1ed0: 78 30 31 2e 0a 54 68 69 73 20 76 61 6c 75 65 20  x01..This value 
1ee0: 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
1ef0: 65 64 20 61 73 20 61 20 62 69 67 2d 65 6e 64 69  ed as a big-endi
1f00: 61 6e 0a 31 20 61 6e 64 20 74 68 6f 75 67 68 74  an.1 and thought
1f10: 20 6f 66 20 69 73 20 61 73 20 61 20 6d 61 67 69   of is as a magi
1f20: 63 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 70 72  c number to repr
1f30: 65 73 65 6e 74 20 74 68 65 20 36 35 35 33 36 20  esent the 65536 
1f40: 70 61 67 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e  page size..Or on
1f50: 65 20 63 61 6e 20 76 69 65 77 20 74 68 65 20 74  e can view the t
1f60: 77 6f 2d 62 79 74 65 20 66 69 65 6c 64 20 61 73  wo-byte field as
1f70: 20 61 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e   a little endian
1f80: 20 6e 75 6d 62 65 72 20 61 6e 64 20 73 61 79 0a   number and say.
1f90: 74 68 61 74 20 69 74 20 72 65 70 72 65 73 65 6e  that it represen
1fa0: 74 73 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  ts the page size
1fb0: 20 64 69 76 69 64 65 64 20 62 79 20 32 35 36 2e   divided by 256.
1fc0: 20 20 54 68 65 73 65 20 74 77 6f 20 0a 69 6e 74    These two .int
1fd0: 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20  erpretations of 
1fe0: 74 68 65 20 70 61 67 65 2d 73 69 7a 65 20 66 69  the page-size fi
1ff0: 65 6c 64 20 61 72 65 20 65 71 75 69 76 61 6c 65  eld are equivale
2000: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  nt.</p>..<h4>1.2
2010: 2e 33 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 76  .3 File format v
2020: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f  ersion numbers</
2030: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65  h4>..<p>The file
2040: 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76 65   format write ve
2050: 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66  rsion and file f
2060: 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72 73 69  ormat read versi
2070: 6f 6e 20 61 74 20 6f 66 66 73 65 74 73 0a 31 38  on at offsets.18
2080: 20 61 6e 64 20 31 39 20 61 72 65 20 69 6e 74 65   and 19 are inte
2090: 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f  nded to allow fo
20a0: 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f  r enhancements o
20b0: 66 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  f the file forma
20c0: 74 0a 69 6e 20 66 75 74 75 72 65 20 76 65 72 73  t.in future vers
20d0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 20  ions of SQLite. 
20e0: 20 49 6e 20 63 75 72 72 65 6e 74 20 76 65 72 73   In current vers
20f0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20  ions of SQLite, 
2100: 62 6f 74 68 20 6f 66 0a 74 68 65 73 65 20 76 61  both of.these va
2110: 6c 75 65 73 20 61 72 65 20 31 20 66 6f 72 20 72  lues are 1 for r
2120: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c  ollback journall
2130: 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64 20 32 20  ing modes and 2 
2140: 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61  for [WAL].journa
2150: 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20  lling mode.  If 
2160: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  a version of SQL
2170: 69 74 65 20 63 6f 64 65 64 20 74 6f 20 74 68 65  ite coded to the
2180: 20 63 75 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f   current.file fo
2190: 72 6d 61 74 20 73 70 65 63 69 66 69 63 61 74 69  rmat specificati
21a0: 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20  on encounters a 
21b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
21c0: 65 72 65 20 74 68 65 20 72 65 61 64 0a 76 65 72  ere the read.ver
21d0: 73 69 6f 6e 20 69 73 20 31 20 6f 72 20 32 20 62  sion is 1 or 2 b
21e0: 75 74 20 74 68 65 20 77 72 69 74 65 20 76 65 72  ut the write ver
21f0: 73 69 6f 6e 20 69 73 20 67 72 65 61 74 65 72 20  sion is greater 
2200: 74 68 61 6e 20 32 2c 20 74 68 65 6e 20 74 68 65  than 2, then the
2210: 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 6d   database.file m
2220: 75 73 74 20 62 65 20 74 72 65 61 74 65 64 20 61  ust be treated a
2230: 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66  s read-only.  If
2240: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
2250: 20 77 69 74 68 20 61 20 72 65 61 64 20 76 65 72   with a read ver
2260: 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74 68 61  sion.greater tha
2270: 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  n 2 is encounter
2280: 2c 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61  , then that data
2290: 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72  base cannot be r
22a0: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c  ead or written.<
22b0: 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52  /p>..<h4>1.2.4 R
22c0: 65 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65  eserved bytes pe
22d0: 72 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e  r page</h4>..<p>
22e0: 53 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61  SQLite has the a
22f0: 62 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73  bility to set as
2300: 69 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62  ide a small numb
2310: 65 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65  er of extra byte
2320: 73 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20  s at.the end of 
2330: 65 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75  every page for u
2340: 73 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73  se by extensions
2350: 2e 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62  .  These extra b
2360: 79 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66  ytes are.used, f
2370: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74  or example, by t
2380: 68 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70  he SQLite Encryp
2390: 74 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74  tion Extension t
23a0: 6f 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a  o store a nonce.
23b0: 61 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61  and/or cryptogra
23c0: 70 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73  phic checksum as
23d0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61  sociated with ea
23e0: 63 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a  ch page.  ^The .
23f0: 22 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22  "reserved space"
2400: 20 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62   size in the 1-b
2410: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
2420: 66 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20  ffset 20 is the 
2430: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20  number.of bytes 
2440: 6f 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20  of space at the 
2450: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
2460: 20 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20   to reserve for 
2470: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73  extensions..This
2480: 20 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c   value is usuall
2490: 79 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20  y 0.  The value 
24a0: 63 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a  can be odd.</p>.
24b0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
24c0: 74 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75  t usable_size {u
24d0: 73 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c  sable size}</tcl
24e0: 3e 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65  >.<p>The "usable
24f0: 20 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61   size" of a data
2500: 62 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65  base page is the
2510: 20 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69   page size speci
2520: 66 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65  fy by the.2-byte
2530: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
2540: 65 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61  et 16 in the hea
2550: 64 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65  der less the "re
2560: 73 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69  served" space si
2570: 7a 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74  ze.recorded in t
2580: 68 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65  he 1-byte intege
2590: 72 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69  r at offset 20 i
25a0: 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54  n the header.  T
25b0: 68 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f  he usable.size o
25c0: 66 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62  f a page might b
25d0: 65 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e  e an odd number.
25e0: 20 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65    ^(However, the
25f0: 20 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20   usable size is 
2600: 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62  not.allowed to b
2610: 65 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e  e less than 480.
2620: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
2630: 2c 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69  , if the page si
2640: 7a 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20  ze is 512,.then 
2650: 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61  the reserved spa
2660: 63 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65  ce size cannot e
2670: 78 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a  xceed 32.)^</p>.
2680: 0a 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f  .<h4>1.2.5 Paylo
2690: 61 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34  ad fractions</h4
26a0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d  >..<p>^The maxim
26b0: 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65  um and minimum e
26c0: 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20  mbedded payload 
26d0: 66 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68  fractions and th
26e0: 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66  e leaf.payload f
26f0: 72 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d  raction values m
2700: 75 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61  ust be 64, 32, a
2710: 6e 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61  nd 32.  These va
2720: 6c 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e  lues were.origin
2730: 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f  ally intended to
2740: 20 61 73 20 74 75 6e 61 62 6c 65 20 70 61 72 61   as tunable para
2750: 6d 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c  meters that coul
2760: 64 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64  d be used to.mod
2770: 69 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20  ify the storage 
2780: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d  format of the b-
2790: 74 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20  tree algorithm. 
27a0: 20 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66   However, that.f
27b0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
27c0: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e  not supported an
27d0: 64 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63  d there are no c
27e0: 75 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20  urrent plans to 
27f0: 61 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74  add.support in t
2800: 68 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63  he future.  Henc
2810: 65 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62  e, these three b
2820: 79 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61  ytes are fixed a
2830: 74 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65  t the.values spe
2840: 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34  cified.</p>..<h4
2850: 3e 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e  >1.2.6 File chan
2860: 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a  ge counter</h4>.
2870: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2880: 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67  t chngctr {chang
2890: 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e  e counter}</tcl>
28a0: 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68  .<p>^The file ch
28b0: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
28c0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
28d0: 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63  ian integer whic
28e0: 68 20 69 73 0a 69 6e 63 72 65 6d 65 6e 74 65 64  h is.incremented
28f0: 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
2900: 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 75  tabase file is u
2910: 6e 6c 6f 63 6b 65 64 20 61 66 74 65 72 20 68 61  nlocked after ha
2920: 76 69 6e 67 0a 62 65 65 6e 20 6d 6f 64 69 66 69  ving.been modifi
2930: 65 64 2e 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20  ed..When two or 
2940: 6d 6f 72 65 20 70 72 6f 63 65 73 73 65 73 20 61  more processes a
2950: 72 65 20 72 65 61 64 69 6e 67 20 74 68 65 20 73  re reading the s
2960: 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ame database fil
2970: 65 2c 20 65 61 63 68 20 0a 70 72 6f 63 65 73 73  e, each .process
2980: 20 63 61 6e 20 64 65 74 65 63 74 20 64 61 74 61   can detect data
2990: 62 61 73 65 20 63 68 61 6e 67 65 73 20 66 72 6f  base changes fro
29a0: 6d 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  m other processe
29b0: 73 20 62 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20  s by monitoring 
29c0: 0a 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  .the change coun
29d0: 74 65 72 2e 0a 41 20 70 72 6f 63 65 73 73 20 77  ter..A process w
29e0: 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ill normally wan
29f0: 74 20 74 6f 20 66 6c 75 73 68 20 69 74 73 20 64  t to flush its d
2a00: 61 74 61 62 61 73 65 20 70 61 67 65 20 63 61 63  atabase page cac
2a10: 68 65 20 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20  he when.another 
2a20: 70 72 6f 63 65 73 73 20 6d 6f 64 69 66 69 65 64  process modified
2a30: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 73   the database, s
2a40: 69 6e 63 65 20 74 68 65 20 63 61 63 68 65 20 68  ince the cache h
2a50: 61 73 20 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e  as become stale.
2a60: 0a 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65  .The file change
2a70: 20 63 6f 75 6e 74 65 72 20 66 61 63 69 6c 69 74   counter facilit
2a80: 61 74 65 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a  ates this.</p>..
2a90: 3c 70 3e 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20  <p>In WAL mode, 
2aa0: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
2ab0: 61 74 61 62 61 73 65 20 61 72 65 20 64 65 74 65  atabase are dete
2ac0: 63 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 77  cted using the w
2ad0: 61 6c 2d 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20  al-index.and so 
2ae0: 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
2af0: 65 72 20 69 73 20 6e 6f 74 20 6e 65 65 64 65 64  er is not needed
2b00: 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 20 63 68  .  Hence, the ch
2b10: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 6d 69 67  ange counter mig
2b20: 68 74 0a 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d  ht.not be increm
2b30: 65 6e 74 65 64 20 6f 6e 20 65 61 63 68 20 74 72  ented on each tr
2b40: 61 6e 73 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c  ansaction in WAL
2b50: 20 6d 6f 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e   mode.</p>..<h4>
2b60: 31 2e 32 2e 37 20 49 6e 2d 68 65 61 64 65 72 20  1.2.7 In-header 
2b70: 64 61 74 61 62 61 73 65 20 73 69 7a 65 3c 2f 68  database size</h
2b80: 34 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  4>..<tcl>hd_frag
2b90: 6d 65 6e 74 20 66 69 6c 65 73 69 7a 65 20 7b 69  ment filesize {i
2ba0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2bb0: 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70  e size}</tcl>.<p
2bc0: 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  >^The 4-byte big
2bd0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
2be0: 61 74 20 6f 66 66 73 65 74 20 32 38 20 69 6e 74  at offset 28 int
2bf0: 6f 20 74 68 65 20 68 65 61 64 65 72 20 0a 73 74  o the header .st
2c00: 6f 72 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66  ores the size of
2c10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2c20: 6c 65 20 69 6e 20 70 61 67 65 73 2e 20 20 5e 49  le in pages.  ^I
2c30: 66 20 74 68 69 73 20 69 6e 2d 68 65 61 64 65 72  f this in-header
2c40: 0a 64 61 74 61 73 69 7a 65 20 73 69 7a 65 20 69  .datasize size i
2c50: 73 20 6e 6f 74 20 76 61 6c 69 64 20 28 73 65 65  s not valid (see
2c60: 20 74 68 65 20 6e 65 78 74 20 70 61 72 61 67 72   the next paragr
2c70: 61 70 68 29 2c 20 74 68 65 6e 20 74 68 65 20 64  aph), then the d
2c80: 61 74 61 62 61 73 65 20 0a 73 69 7a 65 20 69 73  atabase .size is
2c90: 20 63 6f 6d 70 75 74 65 64 20 62 79 20 6c 6f 6f   computed by loo
2ca0: 6b 69 6e 67 0a 61 74 20 74 68 65 20 61 63 74 75  king.at the actu
2cb0: 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  al size of the d
2cc0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 4f 6c  atabase file. Ol
2cd0: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
2ce0: 53 51 4c 69 74 65 0a 69 67 6e 6f 72 65 64 20 74  SQLite.ignored t
2cf0: 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74  he in-header dat
2d00: 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20 75  abase size and u
2d10: 73 65 64 20 74 68 65 20 61 63 74 75 61 6c 20 66  sed the actual f
2d20: 69 6c 65 20 73 69 7a 65 0a 65 78 63 6c 75 73 69  ile size.exclusi
2d30: 76 65 6c 79 2e 20 20 5e 4e 65 77 65 72 20 76 65  vely.  ^Newer ve
2d40: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
2d50: 20 75 73 65 20 74 68 65 20 69 6e 2d 68 65 61 64   use the in-head
2d60: 65 72 20 64 61 74 61 62 61 73 65 0a 73 69 7a 65  er database.size
2d70: 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61   if it is availa
2d80: 62 6c 65 20 62 75 74 20 66 61 6c 6c 20 62 61 63  ble but fall bac
2d90: 6b 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  k to the actual 
2da0: 66 69 6c 65 20 73 69 7a 65 20 69 66 0a 74 68 65  file size if.the
2db0: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2dc0: 61 73 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 20  ase size is not 
2dd0: 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  valid.</p>..<p>^
2de0: 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  The in-header da
2df0: 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 6f  tabase size is o
2e00: 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74  nly considered t
2e10: 6f 20 62 65 20 76 61 6c 69 64 20 69 66 0a 69 74  o be valid if.it
2e20: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64   is non-zero and
2e30: 20 69 66 20 74 68 65 20 34 2d 62 79 74 65 20 5b   if the 4-byte [
2e40: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20  change counter] 
2e50: 61 74 20 6f 66 66 73 65 74 20 32 34 0a 65 78 61  at offset 24.exa
2e60: 63 74 6c 79 20 6d 61 74 63 68 65 73 20 74 68 65  ctly matches the
2e70: 20 34 2d 62 79 74 65 20 5b 76 65 72 73 69 6f 6e   4-byte [version
2e80: 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65  -valid-for numbe
2e90: 72 5d 20 61 74 20 6f 66 66 73 65 74 20 39 32 2e  r] at offset 92.
2ea0: 0a 5e 28 54 68 65 20 69 6e 2d 68 65 61 64 65 72  .^(The in-header
2eb0: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 69   database size i
2ec0: 73 20 61 6c 77 61 79 73 20 76 61 6c 69 64 20 0a  s always valid .
2ed0: 77 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  when the databas
2ee0: 65 20 69 73 20 6f 6e 6c 79 20 6d 6f 64 69 66 69  e is only modifi
2ef0: 65 64 20 75 73 69 6e 67 20 72 65 63 65 6e 74 20  ed using recent 
2f00: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
2f10: 74 65 0a 28 76 65 72 73 69 6f 6e 73 20 33 2e 37  te.(versions 3.7
2f20: 2e 30 20 61 6e 64 20 6c 61 74 65 72 29 2e 29 5e  .0 and later).)^
2f30: 0a 49 66 20 61 20 6c 65 67 61 63 79 20 76 65 72  .If a legacy ver
2f40: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 77  sion of SQLite w
2f50: 72 69 74 65 73 20 74 6f 20 74 68 65 20 64 61 74  rites to the dat
2f60: 61 62 61 73 65 2c 20 69 74 20 77 69 6c 6c 20 6e  abase, it will n
2f70: 6f 74 0a 6b 6e 6f 77 20 74 6f 20 75 70 64 61 74  ot.know to updat
2f80: 65 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20  e the in-header 
2f90: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 61 6e  database size an
2fa0: 64 20 73 6f 20 74 68 65 20 69 6e 2d 68 65 61 64  d so the in-head
2fb0: 65 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a 65  er.database size
2fc0: 20 63 6f 75 6c 64 20 62 65 20 69 6e 63 6f 72 72   could be incorr
2fd0: 65 63 74 2e 20 20 42 75 74 20 6c 65 67 61 63 79  ect.  But legacy
2fe0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2ff0: 69 74 65 0a 77 69 6c 6c 20 61 6c 73 6f 20 6c 65  ite.will also le
3000: 61 76 65 20 74 68 65 20 76 65 72 73 69 6f 6e 2d  ave the version-
3010: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
3020: 20 61 74 20 6f 66 66 73 65 74 20 39 32 20 75 6e   at offset 92 un
3030: 63 68 61 6e 67 65 64 0a 73 6f 20 69 74 20 77 69  changed.so it wi
3040: 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65  ll not match the
3050: 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 2e   change-counter.
3060: 20 20 48 65 6e 63 65 2c 20 69 6e 76 61 6c 69 64    Hence, invalid
3070: 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 62   in-header.datab
3080: 61 73 65 20 73 69 7a 65 73 20 63 61 6e 20 62 65  ase sizes can be
3090: 20 64 65 74 65 63 74 65 64 20 28 61 6e 64 20 69   detected (and i
30a0: 67 6e 6f 72 65 64 29 20 62 79 20 6f 62 73 65 72  gnored) by obser
30b0: 76 69 6e 67 20 77 68 65 6e 0a 74 68 65 20 63 68  ving when.the ch
30c0: 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20 64 6f 65  ange-counter doe
30d0: 73 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20  s not match the 
30e0: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
30f0: 72 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c  r number.</p>..<
3100: 68 34 3e 31 2e 32 2e 38 20 46 72 65 65 20 70 61  h4>1.2.8 Free pa
3110: 67 65 20 6c 69 73 74 3c 2f 68 34 3e 0a 0a 3c 70  ge list</h4>..<p
3120: 3e 55 6e 75 73 65 64 20 70 61 67 65 73 20 69 6e  >Unused pages in
3130: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3140: 6c 65 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  le are stored on
3150: 20 61 20 66 72 65 65 6c 69 73 74 2e 20 20 5e 54   a freelist.  ^T
3160: 68 65 0a 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he.4-byte big-en
3170: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
3180: 6f 66 66 73 65 74 20 33 32 20 73 74 6f 72 65 73  offset 32 stores
3190: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
31a0: 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 70 61   of.the first pa
31b0: 67 65 20 6f 66 20 74 68 65 20 66 72 65 65 6c 69  ge of the freeli
31c0: 73 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  st, or zero if t
31d0: 68 65 20 66 72 65 65 6c 69 73 74 20 69 73 20 65  he freelist is e
31e0: 6d 70 74 79 2e 0a 5e 54 68 65 20 34 2d 62 79 74  mpty..^The 4-byt
31f0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
3200: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 33  eger at offset 3
3210: 36 20 73 74 6f 72 65 73 20 73 74 6f 72 65 73 20  6 stores stores 
3220: 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75 6d 62 65  the total .numbe
3230: 72 20 6f 66 20 70 61 67 65 73 20 6f 6e 20 74 68  r of pages on th
3240: 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a  e freelist.</p>.
3250: 0a 3c 68 34 3e 31 2e 32 2e 39 20 53 63 68 65 6d  .<h4>1.2.9 Schem
3260: 61 20 63 6f 6f 6b 69 65 3c 2f 68 34 3e 0a 0a 3c  a cookie</h4>..<
3270: 70 3e 5e 54 68 65 20 73 63 68 65 6d 61 20 63 6f  p>^The schema co
3280: 6f 6b 69 65 20 69 73 20 61 20 34 2d 62 79 74 65  okie is a 4-byte
3290: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
32a0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 30  ger at offset 40
32b0: 0a 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65  .that is increme
32c0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 20 74 68  nted whenever th
32d0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
32e0: 61 20 63 68 61 6e 67 65 73 2e 20 20 41 20 0a 70  a changes.  A .p
32f0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
3300: 74 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 61 67  t is compiled ag
3310: 61 69 6e 73 74 20 61 20 73 70 65 63 69 66 69 63  ainst a specific
3320: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a   version of the.
3330: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
3340: 20 20 5e 57 68 65 6e 65 76 65 72 20 74 68 65 20    ^Whenever the 
3350: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
3360: 63 68 61 6e 67 65 73 2c 20 74 68 65 20 73 74 61  changes, the sta
3370: 74 65 6d 65 6e 74 0a 6d 75 73 74 20 62 65 20 72  tement.must be r
3380: 65 70 72 65 70 61 72 65 64 2e 20 20 5e 57 68 65  eprepared.  ^Whe
3390: 6e 65 76 65 72 20 61 20 70 72 65 70 61 72 65 64  never a prepared
33a0: 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c   statement runs,
33b0: 20 69 74 20 66 69 72 73 74 20 63 68 65 63 6b 73   it first checks
33c0: 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .the schema cook
33d0: 69 65 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ie to make sure 
33e0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65  the value is the
33f0: 20 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68   same as when th
3400: 65 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20  e statement.was 
3410: 70 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20  prepared and if 
3420: 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
3430: 65 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74  e has changed, t
3440: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  he statement abo
3450: 72 74 73 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20  rts.in order to 
3460: 66 6f 72 63 65 20 74 68 65 20 73 74 61 74 65 6d  force the statem
3470: 65 6e 74 20 74 6f 20 62 65 20 72 65 70 72 65 70  ent to be reprep
3480: 61 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ared.</p>..<tcl>
3490: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68  hd_fragment {sch
34a0: 65 6d 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65  emaformat} {sche
34b0: 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72  ma format number
34c0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e  }</tcl>.<h4>1.2.
34d0: 31 30 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  10 Schema format
34e0: 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70   number</h4>..<p
34f0: 3e 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d  >The schema form
3500: 61 74 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34  at number is a 4
3510: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
3520: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3530: 65 74 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d  et 44..The schem
3540: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20  a format number 
3550: 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  is similar to th
3560: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65  e file format re
3570: 61 64 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72  ad and write.ver
3580: 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20  sion numbers at 
3590: 6f 66 66 73 65 74 73 20 31 38 20 61 6e 64 20 31  offsets 18 and 1
35a0: 39 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  9 except that th
35b0: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
35c0: 6e 75 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f  number.refers to
35d0: 20 74 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20   the high-level 
35e0: 53 51 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72  SQL formatting r
35f0: 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c  ather than the l
3600: 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a  ow-level b-tree.
3610: 66 6f 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75  formatting.  Fou
3620: 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  r schema format 
3630: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 75 72 72  numbers are curr
3640: 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f  ently defined:</
3650: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c  p>..<ol>.<li val
3660: 75 65 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73  ue=1>Format 1 is
3670: 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61   understood by a
3680: 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ll versions of S
3690: 51 4c 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65  QLite back to.ve
36a0: 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69  rsion 3.0.0.</li
36b0: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f  >.<li value=2>Fo
36c0: 72 6d 61 74 20 32 20 61 64 64 73 20 74 68 65 20  rmat 2 adds the 
36d0: 61 62 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20  ability of rows 
36e0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
36f0: 74 61 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20  table.to have a 
3700: 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f  varying number o
3710: 66 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72  f columns, in or
3720: 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74  der to support t
3730: 68 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20  he.[ALTER TABLE 
3740: 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e  | ALTER TABLE ..
3750: 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75  . ADD COLUMN] fu
3760: 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75  nctionality.  Su
3770: 70 70 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e  pport for.readin
3780: 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f  g and writing fo
3790: 72 6d 61 74 20 32 20 77 61 73 20 61 64 64 65 64  rmat 2 was added
37a0: 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69   in SQLite versi
37b0: 6f 6e 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30  on 3.1.3 .on 200
37c0: 35 2d 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c  5-02-19.</li>.<l
37d0: 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74  i value=3>Format
37e0: 20 33 20 61 64 64 73 20 74 68 65 20 61 62 69 6c   3 adds the abil
37f0: 69 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c  ity of extra col
3800: 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41  umns added by.[A
3810: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
3820: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
3830: 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65   COLUMN] to have
3840: 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
3850: 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20  t.values.  This 
3860: 63 61 70 61 62 69 6c 69 74 79 20 77 61 73 20 61  capability was a
3870: 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76  dded in SQLite v
3880: 65 72 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e  ersion 3.1.4 .on
3890: 20 32 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69   2005-03-11.</li
38a0: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46  >.<li value=4>^F
38b0: 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73 20 53  ormat 4 causes S
38c0: 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65 63 74  QLite to respect
38d0: 20 74 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e 67   the.[descending
38e0: 20 69 6e 64 69 63 65 73 20 7c 20 44 45 53 43 20   indices | DESC 
38f0: 6b 65 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65  keyword] on.inde
3900: 78 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20  x declarations. 
3910: 20 28 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77   (^The DESC keyw
3920: 6f 72 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69  ord is ignored i
3930: 6e 20 69 6e 64 69 63 65 73 20 66 6f 72 20 0a 66  n indices for .f
3940: 6f 72 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64  ormats 1, 2, and
3950: 20 33 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61   3.).^Format 4 a
3960: 6c 73 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77  lso adds two new
3970: 20 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20   boolean record 
3980: 74 79 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65  type values ([se
3990: 72 69 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e  rial types].8 an
39a0: 64 20 39 2e 29 20 20 53 75 70 70 6f 72 74 20 66  d 9.)  Support f
39b0: 6f 72 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20  or format 4 was 
39c0: 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  added in SQLite 
39d0: 33 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31  3.3.0 on.2006-01
39e0: 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  -10.</li>.</ol>.
39f0: 0a 3c 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73  .<p>^New databas
3a00: 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20  e files created 
3a10: 62 79 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f  by SQLite use fo
3a20: 72 6d 61 74 20 34 20 62 79 20 64 65 66 61 75 6c  rmat 4 by defaul
3a30: 74 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f  t..^The [legacy_
3a40: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67  file_format prag
3a50: 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ma] can be used 
3a60: 74 6f 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a  to cause SQLite.
3a70: 74 6f 20 63 72 65 61 74 65 20 6e 65 77 20 64 61  to create new da
3a80: 74 61 62 61 73 65 20 66 69 6c 65 73 20 75 73 69  tabase files usi
3a90: 6e 67 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68 65  ng format 1..The
3aa0: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
3ab0: 6e 75 6d 62 65 72 20 63 61 6e 20 62 65 20 6d 61  number can be ma
3ac0: 64 65 20 74 6f 20 64 65 66 61 75 6c 74 20 74 6f  de to default to
3ad0: 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 34 20   1 instead of 4 
3ae0: 62 79 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c 49  by.setting [SQLI
3af0: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
3b00: 46 4f 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f 6d  FORMAT]=1 at com
3b10: 70 69 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a  pile-time..</p>.
3b20: 0a 3c 68 34 3e 31 2e 32 2e 31 31 20 53 75 67 67  .<h4>1.2.11 Sugg
3b30: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3b40: 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d  </h4>..<p>The 4-
3b50: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3b60: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61  signed integer a
3b70: 74 20 6f 66 66 73 65 74 20 34 38 20 69 73 20 74  t offset 48 is t
3b80: 68 65 20 73 75 67 67 65 73 74 65 64 0a 63 61 63  he suggested.cac
3b90: 68 65 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73  he size in pages
3ba0: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3bb0: 65 20 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c  e file.  The val
3bc0: 75 65 20 69 73 20 61 20 73 75 67 67 65 73 74 69  ue is a suggesti
3bd0: 6f 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69  on.only and SQLi
3be0: 74 65 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f  te is under no o
3bf0: 62 6c 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e  bligation to hon
3c00: 6f 72 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f  or it.  The abso
3c10: 6c 75 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68  lute value.of th
3c20: 65 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 65  e integer is use
3c30: 64 20 61 73 20 74 68 65 20 73 75 67 67 65 73 74  d as the suggest
3c40: 65 64 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75  ed size.  The su
3c50: 67 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69  ggested cache si
3c60: 7a 65 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73  ze.can be set us
3c70: 69 6e 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74  ing the [default
3c80: 5f 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67  _cache_size prag
3c90: 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ma].</p>..<h4>1.
3ca0: 32 2e 31 32 20 49 6e 63 72 65 6d 65 6e 74 61 6c  2.12 Incremental
3cb0: 20 76 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73   vacuum settings
3cc0: 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77  </h4>..<p>The tw
3cd0: 6f 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  o 4-byte big-end
3ce0: 69 61 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20  ian integers at 
3cf0: 6f 66 66 73 65 74 73 20 35 32 20 61 6e 64 20 36  offsets 52 and 6
3d00: 34 20 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61  4 are used.to ma
3d10: 6e 61 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76  nage the [auto_v
3d20: 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72  acuum] and [incr
3d30: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20  emental_vacuum] 
3d40: 6d 6f 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20  modes.  ^If.the 
3d50: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3d60: 74 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65  t 52 is zero the
3d70: 6e 20 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70  n pointer-map (p
3d80: 74 72 6d 61 70 29 20 70 61 67 65 73 20 61 72 65  trmap) pages are
3d90: 0a 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68  .omitted from th
3da0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
3db0: 61 6e 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f  and neither auto
3dc0: 5f 76 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72  _vacuum nor.incr
3dd0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61  emental_vacuum a
3de0: 72 65 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e  re supported.  ^
3df0: 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  If the integer a
3e00: 74 20 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e  t offset 52 is.n
3e10: 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20  on-zero then it 
3e20: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
3e30: 65 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  er of the larges
3e40: 74 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  t root page in t
3e50: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
3e60: 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  , the database f
3e70: 69 6c 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  ile will contain
3e80: 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61   ptrmap pages, a
3e90: 6e 64 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74  nd the.mode must
3ea0: 20 62 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f   be either auto_
3eb0: 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d  vacuum or increm
3ec0: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e  ental_vacuum.  ^
3ed0: 49 6e 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63  In this latter.c
3ee0: 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72  ase, the integer
3ef0: 20 61 74 20 6f 66 66 73 65 74 20 36 34 20 69 73   at offset 64 is
3f00: 20 74 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d   true for increm
3f10: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64  ental_vacuum and
3f20: 0a 66 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f  .false for auto_
3f30: 76 61 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65  vacuum.  ^If the
3f40: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3f50: 65 74 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68  et 52 is zero th
3f60: 65 6e 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61  en.the integer a
3f70: 74 20 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74  t offset 64 must
3f80: 20 61 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f   also be zero.</
3f90: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 33 20 54  p>..<h4>1.2.13 T
3fa0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 3c 2f 68 34  ext encoding</h4
3fb0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
3fc0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
3fd0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35  eger at offset 5
3fe0: 36 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  6 determines the
3ff0: 20 65 6e 63 6f 64 69 6e 67 0a 75 73 65 64 20 66   encoding.used f
4000: 6f 72 20 61 6c 6c 20 74 65 78 74 20 73 74 72 69  or all text stri
4010: 6e 67 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ngs stored in th
4020: 65 20 64 61 74 61 62 61 73 65 2e 20 20 5e 41 20  e database.  ^A 
4030: 76 61 6c 75 65 20 6f 66 20 31 20 6d 65 61 6e 73  value of 1 means
4040: 0a 55 54 46 2d 38 2e 20 20 5e 41 20 76 61 6c 75  .UTF-8.  ^A valu
4050: 65 20 6f 66 20 32 20 6d 65 61 6e 73 20 55 54 46  e of 2 means UTF
4060: 2d 31 36 6c 65 2e 20 20 5e 41 20 76 61 6c 75 65  -16le.  ^A value
4070: 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54 46 2d   of 3 means UTF-
4080: 31 36 62 65 2e 0a 4e 6f 20 6f 74 68 65 72 20 76  16be..No other v
4090: 61 6c 75 65 73 20 61 72 65 20 61 6c 6c 6f 77 65  alues are allowe
40a0: 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  d.</p>..<h4>1.2.
40b0: 31 34 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20  14 User version 
40c0: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
40d0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
40e0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
40f0: 74 20 6f 66 66 73 65 74 20 36 30 20 69 73 20 74  t offset 60 is t
4100: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
4110: 77 68 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64  which.is set and
4120: 20 71 75 65 72 69 65 64 20 62 79 20 74 68 65 20   queried by the 
4130: 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72  [user_version pr
4140: 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72  agma].  The user
4150: 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20   version is.not 
4160: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c  used by SQLite.<
4170: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4180: 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41 70 70  gment appid {App
4190: 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63  lication ID}</tc
41a0: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20 41 70  l>.<h4>1.2.15 Ap
41b0: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 34  plication ID</h4
41c0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
41d0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
41e0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
41f0: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4200: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
4210: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
4220: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
4230: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
4240: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
4250: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
4260: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
4270: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4280: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
4290: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
42a0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
42b0: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
42c0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
42d0: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
42e0: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
42f0: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4300: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
4310: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
4320: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
4330: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
4340: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
4350: 69 6c 65 28 31 29 5d 20 63 61 6e 20 64 65 74 65  ile(1)] can dete
4360: 72 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66  rmine the specif
4370: 69 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74  ic.file type rat
4380: 68 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65  her than just re
4390: 70 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33  porting "SQLite3
43a0: 20 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c   Database".  A l
43b0: 69 73 74 0a 61 73 73 69 67 6e 65 64 20 61 70 70  ist.assigned app
43c0: 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63 61 6e  lication IDs can
43d0: 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f 6e 73   be seen by cons
43e0: 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74 74 70  ulting the.[http
43f0: 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
4400: 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74 3f 63  g/src/artifact?c
4410: 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61 6d 65  i=trunk&filename
4420: 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67 69 63  =magic.txt|magic
4430: 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20 74 68  .txt].file in th
4440: 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20  e SQLite source 
4450: 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70 3e 0a  repository.</p>.
4460: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
4470: 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65 72 73  t validfor {vers
4480: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
4490: 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  mber}</tcl>.<h4>
44a0: 31 2e 32 2e 31 36 20 57 72 69 74 65 20 6c 69 62  1.2.16 Write lib
44b0: 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e 75 6d  rary version num
44c0: 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f 6e 2d  ber and version-
44d0: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
44e0: 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34  </h4>..<p>^The 4
44f0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
4500: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
4510: 65 74 20 39 36 20 73 74 6f 72 65 73 20 74 68 65  et 96 stores the
4520: 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f   .[SQLITE_VERSIO
4530: 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75 65 20  N_NUMBER] value 
4540: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
4550: 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f 73 74  ibrary that most
4560: 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69 66 69  .recently modifi
4570: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
4580: 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d 62 79  file.  ^The 4-by
4590: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
45a0: 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74 20  teger at.offset 
45b0: 39 32 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  92 is the value 
45c0: 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65 20 63  of the [change c
45d0: 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74 68 65  ounter] when the
45e0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 0a   version number.
45f0: 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54 68 65  was stored.  The
4600: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
4610: 65 74 20 39 32 20 69 6e 64 69 63 61 74 65 73 20  et 92 indicates 
4620: 77 68 69 63 68 20 74 72 61 6e 73 61 63 74 69 6f  which transactio
4630: 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75  n.the version nu
4640: 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20 66 6f  mber is valid fo
4650: 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74 69 6d  r and is sometim
4660: 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a 22 76  es called the."v
4670: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
4680: 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34 3e 31   number"...<h4>1
4690: 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73 70 61  .2.16 Header spa
46a0: 63 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 20  ce reserved for 
46b0: 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e 0a 0a  expansion</h4>..
46c0: 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62 79 74  <p>All other byt
46d0: 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
46e0: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 61  se file header a
46f0: 72 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 0a  re reserved for.
4700: 66 75 74 75 72 65 20 65 78 70 61 6e 73 69 6f 6e  future expansion
4710: 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73 65 74   and must be set
4720: 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c   to zero.</p>..<
4730: 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63 6b 2d  h3>1.3 The Lock-
4740: 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e 0a 0a  Byte Page</h3>..
4750: 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65  <p>The lock-byte
4760: 20 70 61 67 65 20 69 73 20 74 68 65 20 73 69 6e   page is the sin
4770: 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  gle page of the 
4780: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 74 68  database file.th
4790: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
47a0: 62 79 74 65 73 20 61 74 20 6f 66 66 73 65 74 73  bytes at offsets
47b0: 20 62 65 74 77 65 65 6e 20 31 30 37 33 37 34 31   between 1073741
47c0: 38 32 34 20 61 6e 64 20 31 30 37 33 37 34 32 33  824 and 10737423
47d0: 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e 20 20  35,.inclusive.  
47e0: 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  A database file 
47f0: 74 68 61 74 20 69 73 20 6c 65 73 73 20 74 68 61  that is less tha
4800: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 31 30  n or equal to 10
4810: 37 33 37 34 31 38 32 34 20 62 79 74 65 73 20 0a  73741824 bytes .
4820: 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69 6e 73  in size contains
4830: 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61   no lock-byte pa
4840: 67 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20  ge.  A database 
4850: 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61 6e  file larger than
4860: 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f 6e 74  .1073741824 cont
4870: 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65  ains exactly one
4880: 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2e   lock-byte page.
4890: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f  .</p>..<p>The lo
48a0: 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73 20  ck-byte page is 
48b0: 73 65 74 20 61 73 69 64 65 20 66 6f 72 20 75 73  set aside for us
48c0: 65 20 62 79 20 74 68 65 20 6f 70 65 72 61 74 69  e by the operati
48d0: 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69 66  ng-system specif
48e0: 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65  ic.[VFS] impleme
48f0: 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70 6c 65  ntation in imple
4900: 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61 74 61  menting the data
4910: 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b 69 6e  base file lockin
4920: 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a 5e 53  g primitives..^S
4930: 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 75  QLite does not u
4940: 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  se the lock-byte
4950: 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53 51 4c   page.  ^The SQL
4960: 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c 20 6e  ite core .will n
4970: 65 76 65 72 20 72 65 61 64 20 6f 72 20 77 72 69  ever read or wri
4980: 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  te the lock-byte
4990: 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20 6f 70   page,.though op
49a0: 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73  erating-system s
49b0: 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20 0a 69  pecific [VFS] .i
49c0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d  mplementations m
49d0: 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72 65 61  ay choose to rea
49e0: 64 20 6f 72 20 77 72 69 74 65 20 62 79 74 65 73  d or write bytes
49f0: 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74   on the lock-byt
4a00: 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64 69 6e  e .page accordin
4a10: 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73 20  g to the .needs 
4a20: 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69 65 73  and proclivities
4a30: 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   of the underlyi
4a40: 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65 20  ng system.  The 
4a50: 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a 5b  unix and win32.[
4a60: 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61 74  VFS] implementat
4a70: 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65 20 62  ions that come b
4a80: 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74 65  uilt into SQLite
4a90: 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 74 6f   do not write to
4aa0: 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20 70   the.lock-byte p
4ab0: 61 67 65 2c 20 62 75 74 20 74 68 69 72 64 2d 70  age, but third-p
4ac0: 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65 6d 65  arty VFS impleme
4ad0: 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74 68  ntations for.oth
4ae0: 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  er operating sys
4af0: 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70 3e 0a  tems might.</p>.
4b00: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
4b10: 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72  t {freelist} {fr
4b20: 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70 61  eelist} {free-pa
4b30: 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c  ge list}</tcl>.<
4b40: 68 33 3e 31 2e 34 20 54 68 65 20 46 72 65 65 6c  h3>1.4 The Freel
4b50: 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 64  ist</h3>..<p>A d
4b60: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67  atabase file mig
4b70: 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65 20 6f  ht contain one o
4b80: 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74 68 61  r more pages tha
4b90: 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61 63 74  t are not in.act
4ba0: 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73 65 64  ive use.  Unused
4bb0: 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d 65 20   pages can come 
4bc0: 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61 6d 70  about, for examp
4bd0: 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72 6d 61  le, when informa
4be0: 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65 64 20  tion.is deleted 
4bf0: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
4c00: 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65 73  e.  Unused pages
4c10: 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74   are stored on t
4c20: 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e 64 20  he freelist.and 
4c30: 61 72 65 20 72 65 75 73 65 64 20 77 68 65 6e 20  are reused when 
4c40: 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67 65 73  additional pages
4c50: 20 61 72 65 20 72 65 71 75 69 72 65 64 2e 3c 2f   are required.</
4c60: 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65 65 6c  p>..<p>The freel
4c70: 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a 65 64  ist is organized
4c80: 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   as a linked lis
4c90: 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20 74 72  t of freelist tr
4ca0: 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68 20 65  unk pages.with e
4cb0: 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65 73 20  ach trunk pages 
4cc0: 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67 65 20  containing page 
4cd0: 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65 72 6f  numbers for zero
4ce0: 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c 69 73   or more freelis
4cf0: 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70  t.leaf pages.</p
4d00: 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69 73 74  >..<p>A freelist
4d10: 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f 6e 73   trunk page cons
4d20: 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79  ists of an array
4d30: 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67 2d 65   of 4-byte big-e
4d40: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 2e 0a  ndian integers..
4d50: 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  The size of the 
4d60: 61 72 72 61 79 20 69 73 20 61 73 20 6d 61 6e 79  array is as many
4d70: 20 69 6e 74 65 67 65 72 73 20 61 73 20 77 69 6c   integers as wil
4d80: 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75 73 61  l fit in the usa
4d90: 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61 20 70  ble space.of a p
4da0: 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75  age.  The minimu
4db0: 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 69  m usable space i
4dc0: 73 20 34 38 30 20 62 79 74 65 73 20 73 6f 20 74  s 480 bytes so t
4dd0: 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20 61 6c  he array will al
4de0: 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61 73 74  ways.be at least
4df0: 20 31 32 30 20 65 6e 74 72 69 65 73 20 69 6e 20   120 entries in 
4e00: 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20 66 69  length.  ^The fi
4e10: 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74  rst integer in t
4e20: 68 65 20 61 72 72 61 79 20 0a 69 73 20 74 68 65  he array .is the
4e30: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
4e40: 74 68 65 20 6e 65 78 74 20 66 72 65 65 6c 69 73  the next freelis
4e50: 74 20 74 72 75 6e 6b 20 70 61 67 65 20 69 6e 20  t trunk page in 
4e60: 74 68 65 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f  the list or zero
4e70: 20 0a 69 66 20 74 68 69 73 20 69 73 20 74 68 65   .if this is the
4e80: 20 6c 61 73 74 20 66 72 65 65 6c 69 73 74 20 74   last freelist t
4e90: 72 75 6e 6b 20 70 61 67 65 2e 20 20 5e 54 68 65  runk page.  ^The
4ea0: 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20   second integer 
4eb0: 69 6e 20 74 68 65 20 61 72 72 61 79 0a 69 73 20  in the array.is 
4ec0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65  the number of le
4ed0: 61 66 20 70 61 67 65 20 70 6f 69 6e 74 65 72 73  af page pointers
4ee0: 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 43 61 6c   to follow.  Cal
4ef0: 6c 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 74  l the second int
4f00: 65 67 65 72 20 4c 2e 0a 5e 49 66 20 4c 20 69 73  eger L..^If L is
4f10: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
4f20: 72 6f 20 74 68 65 6e 20 69 6e 74 65 67 65 72 73  ro then integers
4f30: 20 77 69 74 68 20 61 72 72 61 79 20 69 6e 64 65   with array inde
4f40: 78 65 73 20 62 65 74 77 65 65 6e 20 32 20 61 6e  xes between 2 an
4f50: 64 0a 4c 2b 31 20 69 6e 63 6c 75 73 69 76 65 20  d.L+1 inclusive 
4f60: 63 6f 6e 74 61 69 6e 20 70 61 67 65 20 6e 75 6d  contain page num
4f70: 62 65 72 73 20 66 6f 72 20 66 72 65 65 6c 69 73  bers for freelis
4f80: 74 20 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70  t leaf pages.</p
4f90: 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c  >..<p>Freelist l
4fa0: 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69  eaf pages contai
4fb0: 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  n no information
4fc0: 2e 20 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64  .  ^SQLite avoid
4fd0: 73 20 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69  s reading or.wri
4fe0: 74 69 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65  ting freelist le
4ff0: 61 66 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65  af pages in orde
5000: 72 20 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b  r to reduce disk
5010: 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20   I/O.</p>..<p>A 
5020: 62 75 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65  bug in SQLite ve
5030: 72 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20  rsions prior to 
5040: 33 2e 36 2e 30 20 63 61 75 73 65 64 20 74 68 65  3.6.0 caused the
5050: 20 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a   database to be.
5060: 72 65 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72  reported as corr
5070: 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
5080: 65 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73  e last 6 entries
5090: 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74   in the freelist
50a0: 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72   trunk page .arr
50b0: 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e  ay contained non
50c0: 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e  -zero values.  N
50d0: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
50e0: 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68   SQLite do not h
50f0: 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d  ave.this problem
5100: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77  .  ^However, new
5110: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
5120: 51 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69  QLite still avoi
5130: 64 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73  d using the .las
5140: 74 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e  t six entries in
5150: 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72   the freelist tr
5160: 75 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69  unk page array i
5170: 6e 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74  n order that dat
5180: 61 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61  abase.files crea
5190: 74 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72  ted by newer ver
51a0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
51b0: 63 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f  can be read by o
51c0: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66  lder versions.of
51d0: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
51e0: 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  >^The number of 
51f0: 66 72 65 65 6c 69 73 74 20 70 61 67 65 73 20 69  freelist pages i
5200: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d  s stored as a 4-
5210: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
5220: 69 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64  integer.in the d
5230: 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 61  atabase header a
5240: 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33  t an offset of 3
5250: 36 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  6 from the begin
5260: 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65  ning of the file
5270: 2e 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 20  ..^The database 
5280: 68 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72  header also stor
5290: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
52a0: 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  er of the first 
52b0: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70  freelist trunk.p
52c0: 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20  age as a 4-byte 
52d0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
52e0: 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  er at an offset 
52f0: 6f 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62  of 32 from the b
5300: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
5310: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31  file.</p>..<h3>1
5320: 2e 35 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c  .5 B-tree Pages<
5330: 2f 68 33 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  /h3>..<p>A b-tre
5340: 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72  e page is either
5350: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67   an interior pag
5360: 65 20 6f 72 20 61 20 6c 65 61 66 20 70 61 67 65  e or a leaf page
5370: 2e 0a 41 20 6c 65 61 66 20 70 61 67 65 20 63 6f  ..A leaf page co
5380: 6e 74 61 69 6e 73 20 6b 65 79 73 20 61 6e 64 20  ntains keys and 
5390: 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
53a0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 65 61   table b-tree ea
53b0: 63 68 0a 6b 65 79 20 68 61 73 20 61 73 73 6f 63  ch.key has assoc
53c0: 69 61 74 65 64 20 63 6f 6e 74 65 6e 74 2e 20 20  iated content.  
53d0: 41 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  An interior page
53e0: 20 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b 65 79 73   contains.K keys
53f0: 20 77 69 74 68 6f 75 74 20 63 6f 6e 74 65 6e 74   without content
5400: 20 62 75 74 20 77 69 74 68 20 4b 2b 31 20 70 6f   but with K+1 po
5410: 69 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20  inters to child 
5420: 62 2d 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20  b-tree pages..A 
5430: 22 70 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20  "pointer" in an 
5440: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
5450: 70 61 67 65 20 69 73 20 6a 75 73 74 20 74 68 65  page is just the
5460: 20 33 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   31-bit integer.
5470: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
5480: 68 65 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f  he child page.</
5490: 70 3e 0a 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74  p>...<p>Define t
54a0: 68 65 20 64 65 70 74 68 0a 6f 66 20 61 20 6c 65  he depth.of a le
54b0: 61 66 20 62 2d 74 72 65 65 20 74 6f 20 62 65 20  af b-tree to be 
54c0: 31 20 61 6e 64 20 74 68 65 20 64 65 70 74 68 20  1 and the depth 
54d0: 6f 66 20 61 6e 79 20 69 6e 74 65 72 69 6f 72 20  of any interior 
54e0: 62 2d 74 72 65 65 20 74 6f 20 62 65 20 6f 6e 65  b-tree to be one
54f0: 0a 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6d  .more than the m
5500: 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
5510: 61 6e 79 20 6f 66 20 69 74 73 20 63 68 69 6c 64  any of its child
5520: 72 65 6e 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c  ren.  ^In a well
5530: 2d 66 6f 72 6d 65 64 0a 64 61 74 61 62 61 73 65  -formed.database
5540: 2c 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f  , all children o
5550: 66 20 61 6e 79 20 6f 6e 65 20 69 6e 74 65 72 69  f any one interi
5560: 6f 72 20 62 2d 74 72 65 65 20 68 61 76 65 20 74  or b-tree have t
5570: 68 65 20 73 61 6d 65 20 64 65 70 74 68 2e 3c 2f  he same depth.</
5580: 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e 74  p>..<p>In an int
5590: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
55a0: 65 2c 20 74 68 65 20 70 6f 69 6e 74 65 72 73 20  e, the pointers 
55b0: 61 6e 64 20 6b 65 79 73 20 6c 6f 67 69 63 61 6c  and keys logical
55c0: 6c 79 20 61 6c 74 65 72 6e 61 74 65 20 0a 77 69  ly alternate .wi
55d0: 74 68 20 61 20 70 6f 69 6e 74 65 72 20 6f 6e 20  th a pointer on 
55e0: 62 6f 74 68 20 65 6e 64 73 2e 20 28 54 68 65 20  both ends. (The 
55f0: 70 72 65 76 69 6f 75 73 20 73 65 6e 74 65 6e 63  previous sentenc
5600: 65 20 69 73 20 74 6f 20 62 65 20 75 6e 64 65 72  e is to be under
5610: 73 74 6f 6f 64 0a 63 6f 6e 63 65 70 74 75 61 6c  stood.conceptual
5620: 6c 79 20 2d 20 74 68 65 20 61 63 74 75 61 6c 20  ly - the actual 
5630: 6c 61 79 6f 75 74 20 6f 66 20 74 68 65 20 6b 65  layout of the ke
5640: 79 73 20 61 6e 64 0a 70 6f 69 6e 74 65 72 73 20  ys and.pointers 
5650: 77 69 74 68 69 6e 20 74 68 65 20 70 61 67 65 20  within the page 
5660: 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
5670: 74 65 64 20 61 6e 64 20 77 69 6c 6c 20 62 65 20  ted and will be 
5680: 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65  described in.the
5690: 20 73 65 71 75 65 6c 2e 29 20 20 41 6c 6c 20 6b   sequel.)  All k
56a0: 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  eys within the s
56b0: 61 6d 65 20 70 61 67 65 20 61 72 65 20 75 6e 69  ame page are uni
56c0: 71 75 65 20 61 6e 64 20 61 72 65 20 6c 6f 67 69  que and are logi
56d0: 63 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a 65 64 20  cally.organized 
56e0: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
56f0: 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  er from left to 
5700: 72 69 67 68 74 2e 20 20 28 41 67 61 69 6e 2c 20  right.  (Again, 
5710: 74 68 69 73 20 6f 72 64 65 72 69 6e 67 0a 69 73  this ordering.is
5720: 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74 20 70 68   logical, not ph
5730: 79 73 69 63 61 6c 2e 20 20 54 68 65 20 61 63 74  ysical.  The act
5740: 75 61 6c 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  ual location of 
5750: 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20  keys within the 
5760: 70 61 67 65 0a 69 73 20 61 72 62 69 74 72 61 72  page.is arbitrar
5770: 79 2e 29 20 5e 46 6f 72 20 61 6e 79 20 6b 65 79  y.) ^For any key
5780: 20 58 2c 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   X, pointers to 
5790: 74 68 65 20 6c 65 66 74 0a 6f 66 20 61 20 58 20  the left.of a X 
57a0: 72 65 66 65 72 20 74 6f 20 62 2d 74 72 65 65 20  refer to b-tree 
57b0: 70 61 67 65 73 20 6f 6e 20 77 68 69 63 68 20 61  pages on which a
57c0: 6c 6c 20 6b 65 79 73 20 61 72 65 20 6c 65 73 73  ll keys are less
57d0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
57e0: 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65 72 73 20 74  o X..^Pointers t
57f0: 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 58  o the right of X
5800: 20 72 65 66 65 72 20 74 6f 20 70 61 67 65 73 20   refer to pages 
5810: 77 68 65 72 65 20 61 6c 6c 20 6b 65 79 73 20 61  where all keys a
5820: 72 65 20 0a 67 72 65 61 74 65 72 20 74 68 61 6e  re .greater than
5830: 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68   X.</p>..<p>With
5840: 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62  in an interior b
5850: 2d 74 72 65 65 20 70 61 67 65 2c 20 65 61 63 68  -tree page, each
5860: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 70 6f 69   key and the poi
5870: 6e 74 65 72 20 74 6f 20 69 74 73 0a 69 6d 6d 65  nter to its.imme
5880: 64 69 61 74 65 20 6c 65 66 74 20 61 72 65 20 63  diate left are c
5890: 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73  ombined into a s
58a0: 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20  tructure called 
58b0: 61 20 22 63 65 6c 6c 22 2e 20 20 54 68 65 0a 72  a "cell".  The.r
58c0: 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65  ight-most pointe
58d0: 72 20 69 73 20 68 65 6c 64 20 73 65 70 61 72 61  r is held separa
58e0: 74 65 6c 79 2e 20 20 41 20 6c 65 61 66 20 62 2d  tely.  A leaf b-
58f0: 74 72 65 65 20 70 61 67 65 20 68 61 73 20 6e 6f  tree page has no
5900: 0a 70 6f 69 6e 74 65 72 73 2c 20 62 75 74 20 69  .pointers, but i
5910: 74 20 73 74 69 6c 6c 20 75 73 65 73 20 74 68 65  t still uses the
5920: 20 63 65 6c 6c 20 73 74 72 75 63 74 75 72 65 20   cell structure 
5930: 74 6f 20 68 6f 6c 64 20 6b 65 79 73 20 66 6f 72  to hold keys for
5940: 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20 6f  .index b-trees o
5950: 72 20 6b 65 79 73 20 61 6e 64 20 63 6f 6e 74 65  r keys and conte
5960: 6e 74 20 66 6f 72 20 74 61 62 6c 65 20 62 2d 74  nt for table b-t
5970: 72 65 65 73 2e 3c 2f 70 3e 0a 3c 2f 70 3e 0a 0a  rees.</p>.</p>..
5980: 3c 70 3e 45 76 65 72 79 20 62 2d 74 72 65 65 20  <p>Every b-tree 
5990: 70 61 67 65 20 68 61 73 20 61 74 20 6d 6f 73 74  page has at most
59a0: 20 6f 6e 65 20 70 61 72 65 6e 74 20 62 2d 74 72   one parent b-tr
59b0: 65 65 20 70 61 67 65 2e 0a 41 20 62 2d 74 72 65  ee page..A b-tre
59c0: 65 20 70 61 67 65 20 77 69 74 68 6f 75 74 20 61  e page without a
59d0: 20 70 61 72 65 6e 74 20 69 73 20 63 61 6c 6c 65   parent is calle
59e0: 64 20 61 20 72 6f 6f 74 20 70 61 67 65 2e 20 20  d a root page.  
59f0: 41 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  A root b-tree pa
5a00: 67 65 0a 74 6f 67 65 74 68 65 72 20 77 69 74 68  ge.together with
5a10: 20 74 68 65 20 63 6c 6f 73 75 72 65 20 6f 66 20   the closure of 
5a20: 69 74 73 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  its children for
5a30: 6d 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74  m a complete b-t
5a40: 72 65 65 2e 0a 49 74 20 69 73 20 70 6f 73 73 69  ree..It is possi
5a50: 62 6c 65 20 28 61 6e 64 20 69 6e 20 66 61 63 74  ble (and in fact
5a60: 20 72 61 74 68 65 72 20 63 6f 6d 6d 6f 6e 29 20   rather common) 
5a70: 74 6f 20 68 61 76 65 20 61 20 63 6f 6d 70 6c 65  to have a comple
5a80: 74 65 20 62 2d 74 72 65 65 0a 74 68 61 74 20 63  te b-tree.that c
5a90: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e  onsists of a sin
5aa0: 67 6c 65 20 70 61 67 65 20 74 68 61 74 20 69 73  gle page that is
5ab0: 20 62 6f 74 68 20 61 20 6c 65 61 66 20 61 6e 64   both a leaf and
5ac0: 20 74 68 65 20 72 6f 6f 74 2e 0a 42 65 63 61 75   the root..Becau
5ad0: 73 65 20 74 68 65 72 65 20 61 72 65 20 70 6f 69  se there are poi
5ae0: 6e 74 65 72 73 20 66 72 6f 6d 20 70 61 72 65 6e  nters from paren
5af0: 74 73 20 74 6f 20 63 68 69 6c 64 72 65 6e 2c 20  ts to children, 
5b00: 65 76 65 72 79 20 70 61 67 65 20 6f 66 20 61 0a  every page of a.
5b10: 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20  complete b-tree 
5b20: 63 61 6e 20 62 65 20 6c 6f 63 61 74 65 64 20 69  can be located i
5b30: 66 20 6f 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20  f only the root 
5b40: 70 61 67 65 20 69 73 20 6b 6e 6f 77 6e 2e 20 20  page is known.  
5b50: 48 65 6e 63 65 2c 0a 62 2d 74 72 65 65 73 20 61  Hence,.b-trees a
5b60: 72 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  re identified by
5b70: 20 74 68 65 69 72 20 72 6f 6f 74 20 70 61 67 65   their root page
5b80: 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   number.</p>..<p
5b90: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69  >A b-tree page i
5ba0: 73 20 65 69 74 68 65 72 20 61 20 74 61 62 6c 65  s either a table
5bb0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 6f 72 20   b-tree page or 
5bc0: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
5bd0: 70 61 67 65 2e 0a 41 6c 6c 20 70 61 67 65 73 20  page..All pages 
5be0: 77 69 74 68 69 6e 20 65 61 63 68 20 63 6f 6d 70  within each comp
5bf0: 6c 65 74 65 20 62 2d 74 72 65 65 20 61 72 65 20  lete b-tree are 
5c00: 6f 66 20 74 68 65 20 73 61 6d 65 20 74 79 70 65  of the same type
5c10: 3a 20 65 69 74 68 65 72 20 74 61 62 6c 65 0a 6f  : either table.o
5c20: 72 20 69 6e 64 65 78 2e 20 20 54 68 65 72 65 20  r index.  There 
5c30: 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20  is a one-to-one 
5c40: 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 74 61 62  mapping from tab
5c50: 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74 68  le b-trees in th
5c60: 65 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65  e database .file
5c70: 20 74 6f 20 28 6e 6f 6e 2d 76 69 72 74 75 61 6c   to (non-virtual
5c80: 29 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  ) tables in the 
5c90: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
5ca0: 20 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65   including syste
5cb0: 6d 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73  m tables.such as
5cc0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20   sqlite_master. 
5cd0: 20 54 68 65 72 65 20 69 73 20 6f 6e 65 2d 74 6f   There is one-to
5ce0: 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74  -one mapping bet
5cf0: 77 65 65 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  ween index b-tre
5d00: 65 73 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  es.in the databa
5d10: 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 69  se file and indi
5d20: 63 65 73 20 69 6e 20 74 68 65 20 73 63 68 65 6d  ces in the schem
5d30: 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70  a, including imp
5d40: 6c 69 65 64 20 69 6e 64 69 63 65 73 0a 63 72 65  lied indices.cre
5d50: 61 74 65 64 20 62 79 20 75 6e 69 71 75 65 6e 65  ated by uniquene
5d60: 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  ss constraints. 
5d70: 20 54 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72   The b-tree corr
5d80: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65  esponding to the
5d90: 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74  .sqlite_master t
5da0: 61 62 6c 65 20 61 6c 77 61 79 73 20 68 61 73 20  able always has 
5db0: 69 74 73 20 72 6f 6f 74 20 70 61 67 65 20 6f 6e  its root page on
5dc0: 20 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f   a page number o
5dd0: 66 20 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  f 1..The sqlite_
5de0: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e  master table con
5df0: 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 20 70  tains the root p
5e00: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 65  age number for e
5e10: 76 65 72 79 20 6f 74 68 65 72 20 0a 74 61 62 6c  very other .tabl
5e20: 65 20 61 6e 64 20 69 6e 64 65 78 20 69 6e 20 74  e and index in t
5e30: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
5e40: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65  .</p>..<p>Each e
5e50: 6e 74 72 79 20 69 6e 20 61 20 74 61 62 6c 65 20  ntry in a table 
5e60: 62 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20  b-tree consists 
5e70: 6f 66 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e  of a 64-bit sign
5e80: 65 64 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 61  ed integer key.a
5e90: 6e 64 20 75 70 20 74 6f 20 32 31 34 37 34 38 33  nd up to 2147483
5ea0: 36 34 37 20 62 79 74 65 73 20 6f 66 20 61 72 62  647 bytes of arb
5eb0: 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 49 6e  itrary data.  In
5ec0: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
5ed0: 72 65 65 73 0a 68 6f 6c 64 20 6f 6e 6c 79 20 6b  rees.hold only k
5ee0: 65 79 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73  eys and pointers
5ef0: 20 74 6f 20 63 68 69 6c 64 72 65 6e 2e 20 20 41   to children.  A
5f00: 6c 6c 20 64 61 74 61 20 69 73 20 63 6f 6e 74 61  ll data is conta
5f10: 69 6e 65 64 20 69 6e 20 74 68 65 0a 74 61 62 6c  ined in the.tabl
5f20: 65 20 62 2d 74 72 65 65 20 6c 65 61 76 65 73 2e  e b-tree leaves.
5f30: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e  </p>..<p>Each en
5f40: 74 72 79 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  try in an index 
5f50: 62 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20  b-tree consists 
5f60: 6f 66 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  of an arbitrary 
5f70: 6b 65 79 20 6f 66 20 75 70 0a 74 6f 20 32 31 34  key of up.to 214
5f80: 37 34 38 33 36 34 37 20 62 79 74 65 73 20 69 6e  7483647 bytes in
5f90: 20 6c 65 6e 67 74 68 20 61 6e 64 20 6e 6f 20 64   length and no d
5fa0: 61 74 61 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ata.</p>..<tcl>h
5fb0: 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 5f  d_fragment cell_
5fc0: 70 61 79 6c 6f 61 64 20 7b 63 65 6c 6c 20 70 61  payload {cell pa
5fd0: 79 6c 6f 61 64 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  yload}</tcl>.<p>
5fe0: 44 65 66 69 6e 65 20 74 68 65 20 22 70 61 79 6c  Define the "payl
5ff0: 6f 61 64 22 20 6f 66 20 61 20 63 65 6c 6c 20 74  oad" of a cell t
6000: 6f 20 62 65 20 74 68 65 20 61 72 62 69 74 72 61  o be the arbitra
6010: 72 79 20 6c 65 6e 67 74 68 20 73 65 63 74 69 6f  ry length sectio
6020: 6e 0a 6f 66 20 74 68 65 20 63 65 6c 6c 2e 20 20  n.of the cell.  
6030: 46 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74  For an index b-t
6040: 72 65 65 2c 20 74 68 65 20 6b 65 79 20 69 73 20  ree, the key is 
6050: 61 6c 77 61 79 73 20 61 72 62 69 74 72 61 72 79  always arbitrary
6060: 20 69 6e 20 6c 65 6e 67 74 68 0a 61 6e 64 20 68   in length.and h
6070: 65 6e 63 65 20 74 68 65 20 70 61 79 6c 6f 61 64  ence the payload
6080: 20 69 73 20 74 68 65 20 6b 65 79 2e 20 20 54 68   is the key.  Th
6090: 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74  ere are no arbit
60a0: 72 61 72 79 20 6c 65 6e 67 74 68 20 65 6c 65 6d  rary length elem
60b0: 65 6e 74 73 0a 69 6e 20 74 68 65 20 63 65 6c 6c  ents.in the cell
60c0: 73 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 74 61  s of interior ta
60d0: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 73  ble b-tree pages
60e0: 20 61 6e 64 20 73 6f 20 74 68 6f 73 65 20 63 65   and so those ce
60f0: 6c 6c 73 20 68 61 76 65 20 6e 6f 0a 70 61 79 6c  lls have no.payl
6100: 6f 61 64 2e 20 20 54 61 62 6c 65 20 62 2d 74 72  oad.  Table b-tr
6110: 65 65 20 6c 65 61 66 20 70 61 67 65 73 20 63 6f  ee leaf pages co
6120: 6e 74 61 69 6e 20 61 72 62 69 74 72 61 72 79 20  ntain arbitrary 
6130: 6c 65 6e 67 74 68 20 63 6f 6e 74 65 6e 74 20 61  length content a
6140: 6e 64 0a 73 6f 20 66 6f 72 20 63 65 6c 6c 73 20  nd.so for cells 
6150: 6f 6e 20 74 68 6f 73 65 20 70 61 67 65 73 20 74  on those pages t
6160: 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68  he payload is th
6170: 65 20 63 6f 6e 74 65 6e 74 2e 0a 3c 70 3e 57 68  e content..<p>Wh
6180: 65 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20 70  en the size of p
6190: 61 79 6c 6f 61 64 20 66 6f 72 20 61 20 63 65 6c  ayload for a cel
61a0: 6c 20 65 78 63 65 65 64 73 20 61 20 63 65 72 74  l exceeds a cert
61b0: 61 69 6e 20 74 68 72 65 73 68 6f 6c 64 20 28 74  ain threshold (t
61c0: 6f 0a 62 65 20 64 65 66 69 6e 65 64 20 6c 61 74  o.be defined lat
61d0: 65 72 29 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  er) then only th
61e0: 65 20 66 69 72 73 74 20 66 65 77 20 62 79 74 65  e first few byte
61f0: 73 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64  s of the payload
6200: 0a 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74  .are stored on t
6210: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 61  he b-tree page a
6220: 6e 64 20 74 68 65 20 62 61 6c 61 6e 63 65 20 69  nd the balance i
6230: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  s stored in a li
6240: 6e 6b 65 64 20 6c 69 73 74 0a 6f 66 20 63 6f 6e  nked list.of con
6250: 74 65 6e 74 20 6f 76 65 72 66 6c 6f 77 20 70 61  tent overflow pa
6260: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62  ges.</p>..<p>A b
6270: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 64 69  -tree page is di
6280: 76 69 64 65 64 20 69 6e 74 6f 20 72 65 67 69 6f  vided into regio
6290: 6e 73 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  ns in the follow
62a0: 69 6e 67 20 6f 72 64 65 72 3a 0a 0a 3c 6f 6c 3e  ing order:..<ol>
62b0: 0a 3c 6c 69 3e 54 68 65 20 31 30 30 2d 62 79 74  .<li>The 100-byt
62c0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
62d0: 68 65 61 64 65 72 20 28 66 6f 75 6e 64 20 6f 6e  header (found on
62e0: 20 70 61 67 65 20 31 20 6f 6e 6c 79 29 0a 3c 6c   page 1 only).<l
62f0: 69 3e 54 68 65 20 38 20 6f 72 20 31 32 20 62 79  i>The 8 or 12 by
6300: 74 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  te b-tree page h
6310: 65 61 64 65 72 0a 3c 6c 69 3e 54 68 65 20 63 65  eader.<li>The ce
6320: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
6330: 0a 3c 6c 69 3e 55 6e 61 6c 6c 6f 63 61 74 65 64  .<li>Unallocated
6340: 20 73 70 61 63 65 0a 3c 6c 69 3e 54 68 65 20 63   space.<li>The c
6350: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
6360: 0a 3c 6c 69 3e 54 68 65 20 72 65 73 65 72 76 65  .<li>The reserve
6370: 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a  d region..</ol>.
6380: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 31 30 30  </p>..<p>The 100
6390: 2d 62 79 74 65 20 64 61 74 61 62 61 73 65 20 66  -byte database f
63a0: 69 6c 65 20 68 65 61 64 65 72 20 69 73 20 66 6f  ile header is fo
63b0: 75 6e 64 20 6f 6e 6c 79 20 6f 6e 20 70 61 67 65  und only on page
63c0: 20 31 2c 20 77 68 69 63 68 20 69 73 0a 61 6c 77   1, which is.alw
63d0: 61 79 73 20 61 20 74 61 62 6c 65 20 62 2d 74 72  ays a table b-tr
63e0: 65 65 20 70 61 67 65 2e 20 20 41 6c 6c 20 6f 74  ee page.  All ot
63f0: 68 65 72 20 62 2d 74 72 65 65 20 70 61 67 65 73  her b-tree pages
6400: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
6410: 20 66 69 6c 65 0a 6f 6d 69 74 20 74 68 69 73 20   file.omit this 
6420: 31 30 30 2d 62 79 74 65 20 68 65 61 64 65 72 2e  100-byte header.
6430: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 73  </p>..<p>The res
6440: 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20  erved region is 
6450: 61 6e 20 61 72 65 61 20 6f 66 20 75 6e 75 73 65  an area of unuse
6460: 64 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  d space at the e
6470: 6e 64 20 6f 66 20 65 76 65 72 79 0a 70 61 67 65  nd of every.page
6480: 20 28 65 78 63 65 70 74 20 74 68 65 20 6c 6f 63   (except the loc
6490: 6b 69 6e 67 20 70 61 67 65 29 20 74 68 61 74 20  king page) that 
64a0: 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 75  extensions can u
64b0: 73 65 20 74 6f 20 68 6f 6c 64 20 70 65 72 2d 70  se to hold per-p
64c0: 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  age.information.
64d0: 20 20 5e 54 68 65 20 73 69 7a 65 20 6f 66 20 74    ^The size of t
64e0: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
64f0: 6f 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  on is determined
6500: 20 62 79 20 74 68 65 20 6f 6e 65 2d 62 79 74 65   by the one-byte
6510: 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65  .unsigned intege
6520: 72 20 66 6f 75 6e 64 20 61 74 20 61 6e 20 6f 66  r found at an of
6530: 66 73 65 74 20 6f 66 20 32 30 20 69 6e 74 6f 20  fset of 20 into 
6540: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6550: 65 20 68 65 61 64 65 72 2e 0a 54 68 65 20 73 69  e header..The si
6560: 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76  ze of the reserv
6570: 65 64 20 72 65 67 69 6f 6e 20 69 73 20 75 73 75  ed region is usu
6580: 61 6c 6c 79 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a  ally zero.</p>..
6590: 3c 70 3e 54 68 65 20 62 2d 74 72 65 65 20 70 61  <p>The b-tree pa
65a0: 67 65 20 68 65 61 64 65 72 20 69 73 20 38 20 62  ge header is 8 b
65b0: 79 74 65 73 20 69 6e 20 73 69 7a 65 20 66 6f 72  ytes in size for
65c0: 20 6c 65 61 66 20 70 61 67 65 73 20 61 6e 64 20   leaf pages and 
65d0: 31 32 0a 62 79 74 65 73 20 66 6f 72 20 69 6e 74  12.bytes for int
65e0: 65 72 69 6f 72 20 70 61 67 65 73 2e 20 20 41 6c  erior pages.  Al
65f0: 6c 20 6d 75 6c 74 69 62 79 74 65 20 76 61 6c 75  l multibyte valu
6600: 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 68  es in the page h
6610: 65 61 64 65 72 0a 61 72 65 20 62 69 67 2d 65 6e  eader.are big-en
6620: 64 69 61 6e 2e 0a 54 68 65 20 62 2d 74 72 65 65  dian..The b-tree
6630: 20 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20   page header is 
6640: 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20  composed of the 
6650: 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64 73  following fields
6660: 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
6670: 3c 69 3e 42 2d 74 72 65 65 20 50 61 67 65 20 48  <i>B-tree Page H
6680: 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
6690: 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  <br>.<table bord
66a0: 65 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22  er=1 width="80%"
66b0: 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
66c0: 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
66d0: 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
66e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
66f0: 69 67 6e 3d 74 6f 70 3e 30 3c 74 64 20 61 6c 69  ign=top>0<td ali
6700: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6710: 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  =top>1<td align=
6720: 6c 65 66 74 3e 0a 41 20 66 6c 61 67 20 69 6e 64  left>.A flag ind
6730: 69 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72  icating the b-tr
6740: 65 65 20 70 61 67 65 20 74 79 70 65 0a 5e 41 20  ee page type.^A 
6750: 76 61 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e 73  value of 2 means
6760: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20   the page is an 
6770: 69 6e 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62  interior index b
6780: 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76  -tree page..^A v
6790: 61 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e 73 20  alue of 5 means 
67a0: 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69  the page is an i
67b0: 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d  nterior table b-
67c0: 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61  tree page..^A va
67d0: 6c 75 65 20 6f 66 20 31 30 20 6d 65 61 6e 73 20  lue of 10 means 
67e0: 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65  the page is a le
67f0: 61 66 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  af index b-tree 
6800: 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f  page..^A value o
6810: 66 20 31 33 20 6d 65 61 6e 73 20 74 68 65 20 70  f 13 means the p
6820: 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 74 61  age is a leaf ta
6830: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
6840: 0a 5e 41 6e 79 20 6f 74 68 65 72 20 76 61 6c 75  .^Any other valu
6850: 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65  e for the b-tree
6860: 20 70 61 67 65 20 74 79 70 65 20 69 73 20 61 6e   page type is an
6870: 20 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74 64 20   error..<tr><td 
6880: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6890: 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69  ign=top>1<td ali
68a0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
68b0: 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  =top>2<td align=
68c0: 6c 65 66 74 3e 0a 42 79 74 65 20 6f 66 66 73 65  left>.Byte offse
68d0: 74 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20  t into the page 
68e0: 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65  of the first fre
68f0: 65 62 6c 6f 63 6b 0a 3c 74 72 3e 3c 74 64 20 61  eblock.<tr><td a
6900: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6910: 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67  gn=top>3<td alig
6920: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6930: 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>2<td align=l
6940: 65 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66 20 63  eft>.Number of c
6950: 65 6c 6c 73 20 6f 6e 20 74 68 69 73 20 70 61 67  ells on this pag
6960: 65 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  e.<tr><td align=
6970: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6980: 70 3e 35 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>5<td align=cen
6990: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32  ter valign=top>2
69a0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
69b0: 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 66 69  Offset to the fi
69c0: 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
69d0: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65  cell content are
69e0: 61 2e 20 20 41 20 7a 65 72 6f 20 76 61 6c 75 65  a.  A zero value
69f0: 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 70 72   is used to repr
6a00: 65 73 65 6e 74 20 61 6e 20 6f 66 66 73 65 74 20  esent an offset 
6a10: 6f 66 20 36 35 35 33 36 2c 20 77 68 69 63 68 20  of 65536, which 
6a20: 6f 63 63 75 72 73 20 6f 6e 20 61 6e 20 65 6d 70  occurs on an emp
6a30: 74 79 20 72 6f 6f 74 20 70 61 67 65 20 77 68 65  ty root page whe
6a40: 6e 20 75 73 69 6e 67 20 61 20 36 35 35 33 36 2d  n using a 65536-
6a50: 62 79 74 65 20 70 61 67 65 20 73 69 7a 65 2e 0a  byte page size..
6a60: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
6a70: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6a80: 37 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  7<td align=cente
6a90: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
6aa0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75  d align=left>.Nu
6ab0: 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e 74  mber of fragment
6ac0: 65 64 20 66 72 65 65 20 62 79 74 65 73 20 77 69  ed free bytes wi
6ad0: 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f  thin the cell co
6ae0: 6e 74 65 6e 74 20 61 72 65 61 0a 3c 74 72 3e 3c  ntent area.<tr><
6af0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6b00: 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c 74 64 20  valign=top>8<td 
6b10: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6b20: 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20 61 6c 69  ign=top>4<td ali
6b30: 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 72 69 67  gn=left>.The rig
6b40: 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 20  ht-most pointer 
6b50: 28 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65  (interior b-tree
6b60: 20 70 61 67 65 73 20 6f 6e 6c 79 29 0a 3c 2f 74   pages only).</t
6b70: 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  able></blockquot
6b80: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  e></center>..<p>
6b90: 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65  ^The cell pointe
6ba0: 72 20 61 72 72 61 79 20 6f 66 20 61 20 62 2d 74  r array of a b-t
6bb0: 72 65 65 20 70 61 67 65 20 69 6d 6d 65 64 69 61  ree page immedia
6bc0: 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65  tely follows the
6bd0: 20 62 2d 74 72 65 65 0a 70 61 67 65 20 68 65 61   b-tree.page hea
6be0: 64 65 72 2e 20 20 4c 65 74 20 4b 20 62 65 20 74  der.  Let K be t
6bf0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c  he number of cel
6c00: 6c 73 20 6f 6e 20 74 68 65 20 62 74 72 65 65 2e  ls on the btree.
6c10: 20 20 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e    ^The cell poin
6c20: 74 65 72 0a 61 72 72 61 79 20 63 6f 6e 73 69 73  ter.array consis
6c30: 74 73 20 6f 66 20 4b 20 32 2d 62 79 74 65 20 69  ts of K 2-byte i
6c40: 6e 74 65 67 65 72 20 6f 66 66 73 65 74 73 20 74  nteger offsets t
6c50: 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  o the cell conte
6c60: 6e 74 73 2e 20 20 5e 54 68 65 0a 63 65 6c 6c 20  nts.  ^The.cell 
6c70: 70 6f 69 6e 74 65 72 73 20 61 72 65 20 61 72 72  pointers are arr
6c80: 61 6e 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64  anged in key ord
6c90: 65 72 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73  er with left-mos
6ca0: 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c  t cell (the cell
6cb0: 20 77 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65   with the.smalle
6cc0: 73 74 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e  st key) first an
6cd0: 64 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  d the right-most
6ce0: 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20   cell (the cell 
6cf0: 77 69 74 68 20 74 68 65 20 6c 61 72 67 65 73 74  with the largest
6d00: 0a 6b 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a  .key) last.</p>.
6d10: 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74  .<p>Cell content
6d20: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
6d30: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72  e cell content r
6d40: 65 67 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74  egion of the b-t
6d50: 72 65 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65  ree page..SQLite
6d60: 20 73 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63   strives to plac
6d70: 65 20 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74  e cells as far t
6d80: 6f 77 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66  oward the end of
6d90: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
6da0: 20 61 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f   as.it can, in o
6db0: 72 64 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70  rder to leave sp
6dc0: 61 63 65 20 66 6f 72 20 66 75 74 75 72 65 20 67  ace for future g
6dd0: 72 6f 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c  rowth of the cel
6de0: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e  l pointer array.
6df0: 0a 54 68 65 20 61 72 65 61 20 69 6e 20 62 65 74  .The area in bet
6e00: 77 65 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65  ween the last ce
6e10: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
6e20: 20 65 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62   entry and the b
6e30: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20  eginning of.the 
6e40: 66 69 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68  first cell is th
6e50: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65  e unallocated re
6e60: 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  gion..</p>..<p>^
6e70: 49 66 20 61 20 70 61 67 65 20 63 6f 6e 74 61 69  If a page contai
6e80: 6e 73 20 6e 6f 20 63 65 6c 6c 73 20 28 77 68 69  ns no cells (whi
6e90: 63 68 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69  ch is only possi
6ea0: 62 6c 65 20 66 6f 72 20 61 20 72 6f 6f 74 20 70  ble for a root p
6eb0: 61 67 65 0a 6f 66 20 61 20 74 61 62 6c 65 20 74  age.of a table t
6ec0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  hat contains no 
6ed0: 72 6f 77 73 29 20 74 68 65 6e 20 74 68 65 20 6f  rows) then the o
6ee0: 66 66 73 65 74 20 74 6f 20 74 68 65 20 63 65 6c  ffset to the cel
6ef0: 6c 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 20 77  l content.area w
6f00: 69 6c 6c 20 65 71 75 61 6c 20 74 68 65 20 70 61  ill equal the pa
6f10: 67 65 20 73 69 7a 65 20 6d 69 6e 75 73 20 74 68  ge size minus th
6f20: 65 20 62 79 74 65 73 20 6f 66 20 72 65 73 65 72  e bytes of reser
6f30: 76 65 64 20 73 70 61 63 65 2e 20 20 5e 28 49 66  ved space.  ^(If
6f40: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73  .the database us
6f50: 65 73 20 61 20 36 35 35 33 36 2d 62 79 74 65 20  es a 65536-byte 
6f60: 70 61 67 65 20 73 69 7a 65 20 61 6e 64 20 74 68  page size and th
6f70: 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65  e reserved space
6f80: 20 69 73 20 7a 65 72 6f 0a 28 74 68 65 20 75 73   is zero.(the us
6f90: 75 61 6c 20 76 61 6c 75 65 20 66 6f 72 20 72 65  ual value for re
6fa0: 73 65 72 76 65 64 20 73 70 61 63 65 29 20 74 68  served space) th
6fb0: 65 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  en the cell cont
6fc0: 65 6e 74 20 6f 66 66 73 65 74 20 6f 66 20 61 6e  ent offset of an
6fd0: 0a 65 6d 70 74 79 20 70 61 67 65 20 77 61 6e 74  .empty page want
6fe0: 73 20 74 6f 20 62 65 20 36 35 35 33 36 2e 20 20  s to be 65536.  
6ff0: 0a 48 6f 77 65 76 65 72 2c 20 74 68 61 74 20 69  .However, that i
7000: 6e 74 65 67 65 72 20 69 73 20 74 6f 6f 20 6c 61  nteger is too la
7010: 72 67 65 20 74 6f 20 62 65 20 73 74 6f 72 65 64  rge to be stored
7020: 20 69 6e 20 61 0a 32 2d 62 79 74 65 20 75 6e 73   in a.2-byte uns
7030: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 73  igned integer, s
7040: 6f 20 61 20 76 61 6c 75 65 20 6f 66 20 30 20 69  o a value of 0 i
7050: 73 20 75 73 65 64 20 69 6e 20 69 74 73 20 70 6c  s used in its pl
7060: 61 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72 65  ace.)^..<p>A fre
7070: 65 62 6c 6f 63 6b 20 69 73 20 61 20 73 74 72 75  eblock is a stru
7080: 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 69 64  cture used to id
7090: 65 6e 74 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74  entify unallocat
70a0: 65 64 20 73 70 61 63 65 20 77 69 74 68 69 6e 0a  ed space within.
70b0: 61 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20  a b-tree page.  
70c0: 46 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f  Freeblocks are o
70d0: 72 67 61 6e 69 7a 65 64 20 61 73 20 61 20 63 68  rganized as a ch
70e0: 61 69 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74  ain.  ^The first
70f0: 20 32 20 62 79 74 65 73 20 6f 66 0a 61 20 66 72   2 bytes of.a fr
7100: 65 65 62 6c 6f 63 6b 20 61 72 65 20 61 20 62 69  eeblock are a bi
7110: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
7120: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
7130: 66 73 65 74 20 69 6e 20 74 68 65 20 62 2d 74 72  fset in the b-tr
7140: 65 65 20 70 61 67 65 0a 6f 66 20 74 68 65 20 6e  ee page.of the n
7150: 65 78 74 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e  ext freeblock in
7160: 20 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a   the chain, or z
7170: 65 72 6f 20 69 66 20 74 68 65 20 66 72 65 65 62  ero if the freeb
7180: 6c 6f 63 6b 20 69 73 20 74 68 65 20 6c 61 73 74  lock is the last
7190: 20 6f 6e 0a 74 68 65 20 63 68 61 69 6e 2e 20 20   on.the chain.  
71a0: 5e 54 68 65 20 74 68 69 72 64 20 61 6e 64 20 66  ^The third and f
71b0: 6f 75 72 74 68 20 62 79 74 65 73 20 6f 66 20 65  ourth bytes of e
71c0: 61 63 68 20 66 72 65 65 62 6c 6f 63 6b 20 66 6f  ach freeblock fo
71d0: 72 6d 0a 61 20 62 69 67 2d 65 6e 64 69 61 6e 20  rm.a big-endian 
71e0: 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
71f0: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
7200: 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 62 79   freeblock in by
7210: 74 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 74  tes, including.t
7220: 68 65 20 34 2d 62 79 74 65 20 68 65 61 64 65 72  he 4-byte header
7230: 2e 20 20 5e 46 72 65 65 62 6c 6f 63 6b 73 20 61  .  ^Freeblocks a
7240: 72 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e 65 63  re always connec
7250: 74 65 64 20 69 6e 20 6f 72 64 65 72 20 0a 6f 66  ted in order .of
7260: 20 69 6e 63 72 65 61 73 69 6e 67 20 6f 66 66 73   increasing offs
7270: 65 74 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64  et.  ^The second
7280: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d   field of the b-
7290: 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72  tree page header
72a0: 20 69 73 20 74 68 65 0a 6f 66 66 73 65 74 20 6f   is the.offset o
72b0: 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65  f the first free
72c0: 62 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f 20 69  block, or zero i
72d0: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66  f there are no f
72e0: 72 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74 68 65  reeblocks on the
72f0: 0a 70 61 67 65 2e 20 20 5e 49 6e 20 61 20 77 65  .page.  ^In a we
7300: 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65  ll-formed b-tree
7310: 20 70 61 67 65 2c 20 74 68 65 72 65 20 77 69 6c   page, there wil
7320: 6c 20 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c  l always be at l
7330: 65 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65  east one cell.be
7340: 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 66  fore the first f
7350: 72 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c  reeblock.</p>..<
7360: 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 72 65  p>A freeblock re
7370: 71 75 69 72 65 73 20 61 74 20 6c 65 61 73 74 20  quires at least 
7380: 34 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65  4 bytes of space
7390: 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
73a0: 6e 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70  n isolated.group
73b0: 20 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33 20 75   of 1, 2, or 3 u
73c0: 6e 75 73 65 64 20 62 79 74 65 73 20 77 69 74 68  nused bytes with
73d0: 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  in the cell cont
73e0: 65 6e 74 20 61 72 65 61 2c 20 74 68 6f 73 65 20  ent area, those 
73f0: 62 79 74 65 73 0a 63 6f 6d 70 72 69 73 65 20 61  bytes.comprise a
7400: 20 66 72 61 67 6d 65 6e 74 2e 20 20 5e 54 68 65   fragment.  ^The
7410: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
7420: 20 62 79 74 65 73 20 69 6e 20 61 6c 6c 20 66 72   bytes in all fr
7430: 61 67 6d 65 6e 74 73 20 69 73 20 73 74 6f 72 65  agments is store
7440: 64 0a 69 6e 20 74 68 65 20 66 69 66 74 68 20 66  d.in the fifth f
7450: 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72  ield of the b-tr
7460: 65 65 20 70 61 67 65 20 68 65 61 64 65 72 2e 20  ee page header. 
7470: 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d   ^In a well-form
7480: 65 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a  ed b-tree page,.
7490: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
74a0: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 66 72 61   of bytes in fra
74b0: 67 6d 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65  gments may not e
74c0: 78 63 65 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c  xceed 60.</p>..<
74d0: 70 3e 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75  p>The total amou
74e0: 6e 74 20 6f 66 20 66 72 65 65 20 73 70 61 63 65  nt of free space
74f0: 20 6f 6e 20 61 20 62 2d 74 72 65 65 20 70 61 67   on a b-tree pag
7500: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  e consists of th
7510: 65 20 73 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e  e size.of the un
7520: 61 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e  allocated region
7530: 20 70 6c 75 73 20 74 68 65 20 74 6f 74 61 6c 20   plus the total 
7540: 73 69 7a 65 20 6f 66 20 61 6c 6c 20 66 72 65 65  size of all free
7550: 62 6c 6f 63 6b 73 20 70 6c 75 73 20 74 68 65 0a  blocks plus the.
7560: 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65  number of fragme
7570: 6e 74 65 64 20 66 72 65 65 20 62 79 74 65 73 2e  nted free bytes.
7580: 20 20 5e 53 51 4c 69 74 65 20 6d 61 79 20 66 72    ^SQLite may fr
7590: 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20  om time to time 
75a0: 72 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74  reorganize.a b-t
75b0: 72 65 65 20 70 61 67 65 20 73 6f 20 74 68 61 74  ree page so that
75c0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72   there are no fr
75d0: 65 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67  eeblocks or frag
75e0: 6d 65 6e 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a  ment bytes, all.
75f0: 75 6e 75 73 65 64 20 62 79 74 65 73 20 61 72 65  unused bytes are
7600: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
7610: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70  e unallocated sp
7620: 61 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20  ace region, and 
7630: 61 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20 70 61  all.cells are pa
7640: 63 6b 65 64 20 74 69 67 68 74 6c 79 20 61 74 20  cked tightly at 
7650: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
7660: 61 67 65 2e 20 20 54 68 69 73 20 69 73 20 63 61  age.  This is ca
7670: 6c 6c 65 64 20 0a 22 64 65 66 72 61 67 6d 65 6e  lled ."defragmen
7680: 74 69 6e 67 22 20 74 68 65 20 62 2d 74 72 65 65  ting" the b-tree
7690: 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   page.</p>..<tcl
76a0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72  >hd_fragment var
76b0: 69 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65  int {variable-le
76c0: 6e 67 74 68 20 69 6e 74 65 67 65 72 7d 20 7b 76  ngth integer} {v
76d0: 61 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  arint}</tcl>..<p
76e0: 3e 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  >A variable-leng
76f0: 74 68 20 69 6e 74 65 67 65 72 20 6f 72 20 22 76  th integer or "v
7700: 61 72 69 6e 74 22 20 69 73 20 61 20 73 74 61 74  arint" is a stat
7710: 69 63 20 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64  ic Huffman encod
7720: 69 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20 74 77  ing.of 64-bit tw
7730: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
7740: 74 65 67 65 72 73 20 74 68 61 74 20 75 73 65 73  tegers that uses
7750: 20 6c 65 73 73 20 73 70 61 63 65 20 66 6f 72 20   less space for 
7760: 73 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a  small positive .
7770: 76 61 6c 75 65 73 2e 20 0a 41 20 76 61 72 69 6e  values. .A varin
7780: 74 20 69 73 20 62 65 74 77 65 65 6e 20 31 20 61  t is between 1 a
7790: 6e 64 20 39 20 62 79 74 65 73 20 69 6e 20 6c 65  nd 9 bytes in le
77a0: 6e 67 74 68 2e 20 20 54 68 65 20 76 61 72 69 6e  ngth.  The varin
77b0: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 65 69  t consists of ei
77c0: 74 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72  ther.zero or mor
77d0: 65 20 62 79 74 65 20 77 68 69 63 68 20 68 61 76  e byte which hav
77e0: 65 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  e the high-order
77f0: 20 62 69 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65   bit set followe
7800: 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 62 79  d by a single by
7810: 74 65 0a 77 69 74 68 20 74 68 65 20 68 69 67 68  te.with the high
7820: 2d 6f 72 64 65 72 20 62 69 74 20 63 6c 65 61 72  -order bit clear
7830: 2c 20 6f 72 20 6e 69 6e 65 20 62 79 74 65 73 2c  , or nine bytes,
7840: 20 77 68 69 63 68 65 76 65 72 20 69 73 20 73 68   whichever is sh
7850: 6f 72 74 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72  orter..The lower
7860: 20 73 65 76 65 6e 20 62 69 74 73 20 6f 66 20 65   seven bits of e
7870: 61 63 68 20 6f 66 20 74 68 65 20 66 69 72 73 74  ach of the first
7880: 20 65 69 67 68 74 20 62 79 74 65 73 20 61 6e 64   eight bytes and
7890: 20 61 6c 6c 20 38 20 62 69 74 73 20 6f 66 0a 74   all 8 bits of.t
78a0: 68 65 20 6e 69 6e 74 68 20 62 79 74 65 20 61 72  he ninth byte ar
78b0: 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 6e 73  e used to recons
78c0: 74 72 75 63 74 20 74 68 65 20 36 34 2d 62 69 74  truct the 64-bit
78d0: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
78e0: 20 69 6e 74 65 67 65 72 2e 0a 56 61 72 69 6e 74   integer..Varint
78f0: 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e  s are big-endian
7900: 3a 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f  : bits taken fro
7910: 6d 20 74 68 65 20 65 61 72 6c 69 65 72 20 62 79  m the earlier by
7920: 74 65 20 6f 66 20 74 68 65 20 76 61 72 69 6e 74  te of the varint
7930: 0a 61 72 65 20 74 68 65 20 6d 6f 72 65 20 73 69  .are the more si
7940: 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 62 69  gnificant and bi
7950: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68  ts taken from th
7960: 65 20 6c 61 74 65 72 20 62 79 74 65 73 2e 20 3c  e later bytes. <
7970: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d  /p>..<p>The form
7980: 61 74 20 6f 66 20 61 20 63 65 6c 6c 20 64 65 70  at of a cell dep
7990: 65 6e 64 73 20 6f 6e 20 77 68 69 63 68 20 6b 69  ends on which ki
79a0: 6e 64 20 6f 66 20 62 2d 74 72 65 65 20 70 61 67  nd of b-tree pag
79b0: 65 20 74 68 65 20 63 65 6c 6c 0a 61 70 70 65 61  e the cell.appea
79c0: 72 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f 6c 6c  rs on.  The foll
79d0: 6f 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f 77  owing table show
79e0: 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f  s the elements o
79f0: 66 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64  f a cell, in.ord
7a00: 65 72 20 6f 66 20 61 70 70 65 61 72 61 6e 63 65  er of appearance
7a10: 2c 20 66 6f 72 20 74 68 65 20 76 61 72 69 6f 75  , for the variou
7a20: 73 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79  s b-tree page ty
7a30: 70 65 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  pes.</p>..<block
7a40: 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 3c  quote><dl>.<dt><
7a50: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c  p>Table B-Tree L
7a60: 65 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64  eaf Cell:</p></d
7a70: 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c  t>.<dd><p><ul>.<
7a80: 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63  li>A varint whic
7a90: 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  h is the total n
7aa0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
7ab0: 66 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75  f payload, inclu
7ac0: 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f  ding any.overflo
7ad0: 77 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77  w.<li>A varint w
7ae0: 68 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65  hich is the inte
7af0: 67 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20  ger key, a.k.a. 
7b00: 22 72 6f 77 69 64 22 0a 3c 6c 69 3e 54 68 65 20  "rowid".<li>The 
7b10: 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20  initial portion 
7b20: 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74  of the payload t
7b30: 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69  hat does not spi
7b40: 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70  ll to overflow.p
7b50: 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ages..<li>A 4-by
7b60: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
7b70: 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65  teger page numbe
7b80: 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  r for the first 
7b90: 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72  page of the.over
7ba0: 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d  flow page list -
7bb0: 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20   omitted if all 
7bc0: 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20  payload fits on 
7bd0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
7be0: 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a  .</ul></p></dd>.
7bf0: 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d  .<dt><p>Table B-
7c00: 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65  Tree Interior Ce
7c10: 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  ll:</p></dt>.<dd
7c20: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34  ><p><ul>.<li>A 4
7c30: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
7c40: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69   page number whi
7c50: 63 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63  ch is the left c
7c60: 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c  hild pointer..<l
7c70: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
7c80: 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20   is the integer 
7c90: 6b 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64  key.</ul></p></d
7ca0: 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78  d>..<dt><p>Index
7cb0: 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c   B-Tree Leaf Cel
7cc0: 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  l:</p></dt>.<dd>
7cd0: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61  <p><ul>.<li>A va
7ce0: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
7cf0: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
7d00: 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20 70  f bytes of key p
7d10: 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e  ayload, includin
7d20: 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c  g any.overflow.<
7d30: 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70  li>The initial p
7d40: 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61  ortion of the pa
7d50: 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20  yload that does 
7d60: 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65  not spill to ove
7d70: 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69  rflow.pages..<li
7d80: 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  >A 4-byte big-en
7d90: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67  dian integer pag
7da0: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
7db0: 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74   first page of t
7dc0: 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  he.overflow page
7dd0: 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20   list - omitted 
7de0: 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66  if all payload f
7df0: 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  its on the b-tre
7e00: 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70  e page..</ul></p
7e10: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49  ></dd>..<dt><p>I
7e20: 6e 64 65 78 20 42 2d 54 72 65 65 20 49 6e 74 65  ndex B-Tree Inte
7e30: 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f  rior Cell:</p></
7e40: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a  dt>.<dd><p><ul>.
7e50: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
7e60: 2d 65 6e 64 69 61 6e 70 61 67 65 20 6e 75 6d 62  -endianpage numb
7e70: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
7e80: 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74  left child point
7e90: 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74  er..<li>A varint
7ea0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f   which is the to
7eb0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
7ec0: 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f  tes of key paylo
7ed0: 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e  ad, including an
7ee0: 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54  y.overflow.<li>T
7ef0: 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69  he initial porti
7f00: 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  on of the payloa
7f10: 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  d that does not 
7f20: 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f  spill to overflo
7f30: 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34  w.pages..<li>A 4
7f40: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
7f50: 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75   integer page nu
7f60: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72  mber for the fir
7f70: 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  st page of the.o
7f80: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73  verflow page lis
7f90: 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61  t - omitted if a
7fa0: 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20  ll payload fits 
7fb0: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
7fc0: 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64  ge..</ul></p></d
7fd0: 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71  d>.</dl></blockq
7fe0: 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e  uote>..<p>The in
7ff0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20  formation above 
8000: 63 61 6e 20 62 65 20 72 65 63 61 73 74 20 69 6e  can be recast in
8010: 74 6f 20 61 20 74 61 62 6c 65 20 66 6f 72 6d 61  to a table forma
8020: 74 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  t as follows:</p
8030: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
8040: 65 6e 74 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b  ent cellformat {
8050: 63 65 6c 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d  cell format summ
8060: 61 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74  ary}</tcl>.<cent
8070: 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65  er>.<i>B-tree Ce
8080: 6c 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74  ll Format</i>.<t
8090: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69  able border=1 wi
80a0: 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c  dth="80%">.<tr><
80b0: 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74  th rowspan=2>Dat
80c0: 61 74 79 70 65 0a 20 20 20 20 3c 74 68 20 63 6f  atype.    <th co
80d0: 6c 73 70 61 6e 3d 34 3e 41 70 70 65 61 72 73 20  lspan=4>Appears 
80e0: 69 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f  in....    <th ro
80f0: 77 73 70 61 6e 3d 32 3e 44 65 73 63 72 69 70 74  wspan=2>Descript
8100: 69 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c  ion.<tr><th>Tabl
8110: 65 20 4c 65 61 66 0a 20 20 20 20 3c 74 68 3e 54  e Leaf.    <th>T
8120: 61 62 6c 65 20 49 6e 74 65 72 69 6f 72 0a 20 20  able Interior.  
8130: 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c 65 61 66    <th>Index Leaf
8140: 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 49  .    <th>Index I
8150: 6e 74 65 72 69 6f 72 0a 3c 74 72 3e 3c 74 64 20  nterior.<tr><td 
8160: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8170: 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69  ign=top>4-byte i
8180: 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61  nteger.    <td a
8190: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
81a0: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
81b0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
81c0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
81d0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
81e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
81f0: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
8200: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8210: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8220: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8230: 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e  lign=left>Page n
8240: 75 6d 62 65 72 20 6f 66 20 6c 65 66 74 20 63 68  umber of left ch
8250: 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ild.<tr><td alig
8260: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8270: 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c  top>varint.    <
8280: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8290: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
82a0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
82b0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
82c0: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
82d0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
82e0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
82f0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8300: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8310: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8320: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8330: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
8340: 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c  of payload.<tr><
8350: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8360: 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e  valign=top>varin
8370: 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  t.    <td align=
8380: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8390: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
83a0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
83b0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
83c0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
83d0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
83e0: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
83f0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8400: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
8410: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8420: 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e 3c  left>Rowid.<tr><
8430: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8440: 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65 20  valign=top>byte 
8450: 61 72 72 61 79 0a 20 20 20 20 3c 74 64 20 61 6c  array.    <td al
8460: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8470: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8480: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8490: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
84a0: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
84b0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
84c0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
84d0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
84e0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
84f0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8500: 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c 6f  align=left>Paylo
8510: 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ad.<tr><td align
8520: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8530: 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65  op>4-byte intege
8540: 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  r.    <td align=
8550: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8560: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8570: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8580: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
8590: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
85a0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
85b0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
85c0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
85d0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
85e0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
85f0: 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62  n=left>Page numb
8600: 65 72 20 6f 66 20 66 69 72 73 74 20 6f 76 65 72  er of first over
8610: 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62 6c  flow page.</tabl
8620: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 0a 3c  e></center>....<
8630: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
8640: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 0a  ter valign=top>.
8650: 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e 74 20 6f  .<p>The amount o
8660: 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 73  f payload that s
8670: 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65 72 66  pills onto overf
8680: 6c 6f 77 20 70 61 67 65 73 20 61 6c 73 6f 20 64  low pages also d
8690: 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65 20 70 61  epends on.the pa
86a0: 67 65 20 74 79 70 65 2e 20 20 46 6f 72 20 74 68  ge type.  For th
86b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
86c0: 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74 20 55 20  utations, let U 
86d0: 62 65 20 74 68 65 20 75 73 61 62 6c 65 20 73 69  be the usable si
86e0: 7a 65 0a 6f 66 20 61 20 64 61 74 61 62 61 73 65  ze.of a database
86f0: 20 70 61 67 65 2c 20 74 68 65 20 74 6f 74 61 6c   page, the total
8700: 20 70 61 67 65 20 73 69 7a 65 20 6c 65 73 73 20   page size less 
8710: 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61  the reserved spa
8720: 63 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f 66  ce at the.end of
8730: 20 65 61 63 68 20 70 61 67 65 2e 20 20 41 6e 64   each page.  And
8740: 20 6c 65 74 20 50 20 62 65 20 74 68 65 20 70 61   let P be the pa
8750: 79 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f 70 3e 0a  yload size.</p>.
8760: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c  .<blockquote><dl
8770: 3e 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54 72  >.<dt>Table B-Tr
8780: 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64  ee Leaf Cell:</d
8790: 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49 66 20 74  t>.<dd><p>.^If t
87a0: 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20  he payload size 
87b0: 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  P is less than o
87c0: 72 20 65 71 75 61 6c 20 74 6f 20 55 2d 33 35 20  r equal to U-35 
87d0: 74 68 65 6e 0a 74 68 65 20 65 6e 74 69 72 65 20  then.the entire 
87e0: 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65  payload is store
87f0: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
8800: 6c 65 61 66 20 70 61 67 65 2e 20 20 0a 5e 28 4c  leaf page.  .^(L
8810: 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a  et M be ((U-12)*
8820: 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66 20  32/255)-23.  If 
8830: 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  P is greater tha
8840: 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74 68 65 20  n U-35.then the 
8850: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 20 73  number of byte s
8860: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74  tored on the b-t
8870: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 69 73  ree leaf page is
8880: 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66 0a   the smaller of.
8890: 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 20  M+((P-M)%(U-4)) 
88a0: 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e 28 4e 6f  and U-35.)^.^(No
88b0: 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f  te that number o
88c0: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
88d0: 6e 20 74 68 65 20 6c 65 61 66 20 70 61 67 65 20  n the leaf page 
88e0: 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68  is never less th
88f0: 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64  an M.)^.</p></dd
8900: 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54  >..<dt>Table B-T
8910: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
8920: 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a  l:</dt>.<dd><p>.
8930: 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73 20 6f  Interior pages o
8940: 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  f table b-trees 
8950: 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20  have no payload 
8960: 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69 73 20  and so there is 
8970: 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61  never.any payloa
8980: 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e  d to spill..</p>
8990: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64 65 78  </dd>..<dt>Index
89a0: 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20   B-Tree Leaf Or 
89b0: 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f  Interior Cell:</
89c0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65  dt>.<dd><p>.^(Le
89d0: 74 20 58 20 62 65 20 28 28 55 2d 31 32 29 2a 36  t X be ((U-12)*6
89e0: 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49 66 20  4/255)-23).  If 
89f0: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
8a00: 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a   P is less than.
8a10: 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68  or equal to X th
8a20: 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  en the entire pa
8a30: 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20  yload is stored 
8a40: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
8a50: 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65  ge.)^.^(Let M be
8a60: 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29   ((U-12)*32/255)
8a70: 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20 67 72  -23.  If P is gr
8a80: 65 61 74 65 72 20 74 68 61 6e 20 58 20 74 68 65  eater than X the
8a90: 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
8aa0: 62 79 74 65 20 73 74 6f 72 65 64 20 6f 6e 20 74  byte stored on t
8ab0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 69  he b-tree page i
8ac0: 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66  s the smaller of
8ad0: 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29  .M+((P-M)%(U-4))
8ae0: 20 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e 6f 74 65   and X.)^.^(Note
8af0: 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f 66 20   that number of 
8b00: 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20  bytes stored on 
8b10: 74 68 65 20 69 6e 64 65 78 20 70 61 67 65 20 69  the index page i
8b20: 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61  s never less tha
8b30: 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e  n M.)^.</p></dd>
8b40: 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  .</dl></blockquo
8b50: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72  te>..<p>The over
8b60: 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20  flow thresholds 
8b70: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
8b80: 67 69 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66  give a minimum f
8b90: 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69  anout of.4 for i
8ba0: 6e 64 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64  ndex b-trees and
8bb0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e   to make sure en
8bc0: 6f 75 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c  ough of the payl
8bd0: 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d  oad.is on the b-
8be0: 74 72 65 65 20 70 61 67 65 20 74 68 61 74 20 74  tree page that t
8bf0: 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
8c00: 20 63 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20   can usually be 
8c10: 61 63 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74  accessed.without
8c20: 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f   consulting an o
8c30: 76 65 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49  verflow page.  I
8c40: 6e 20 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65  n hindsight, the
8c50: 20 64 65 73 69 67 6e 65 72 73 20 6f 66 0a 74 68   designers of.th
8c60: 65 20 53 51 4c 69 74 65 20 62 2d 74 72 65 65 20  e SQLite b-tree 
8c70: 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65 20 74 68  logic realize th
8c80: 61 74 20 74 68 65 73 65 20 74 68 72 65 73 68 6f  at these thresho
8c90: 6c 64 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62  lds could have b
8ca0: 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69  een.made much si
8cb0: 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c  mpler.  However,
8cc0: 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e   the computation
8cd0: 73 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e  s cannot be chan
8ce0: 67 65 64 0a 77 69 74 68 6f 75 74 20 72 65 73 75  ged.without resu
8cf0: 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f  lting in an inco
8d00: 6d 70 61 74 69 62 6c 65 20 66 69 6c 65 20 66 6f  mpatible file fo
8d10: 72 6d 61 74 2e 20 20 41 6e 64 20 74 68 65 20 63  rmat.  And the c
8d20: 75 72 72 65 6e 74 20 63 6f 6d 70 75 74 61 74 69  urrent computati
8d30: 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65  ons.work well, e
8d40: 76 65 6e 20 69 66 20 74 68 65 79 20 61 72 65 20  ven if they are 
8d50: 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78  a little complex
8d60: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
8d70: 72 61 67 6d 65 6e 74 20 6f 76 66 6c 70 67 73 20  ragment ovflpgs 
8d80: 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 7d 20  {overflow page} 
8d90: 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 7d  {overflow pages}
8da0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 36 20 43  </tcl>.<h3>1.6 C
8db0: 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76 65 72  ell Payload Over
8dc0: 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68 33 3e 0a  flow Pages</h3>.
8dd0: 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 70 61  .<p>^When the pa
8de0: 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74 72 65  yload of a b-tre
8df0: 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20 6c 61  e cell is too la
8e00: 72 67 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72  rge for the b-tr
8e10: 65 65 20 70 61 67 65 2c 0a 74 68 65 20 73 75 72  ee page,.the sur
8e20: 70 6c 75 73 20 69 73 20 73 70 69 6c 6c 65 64 20  plus is spilled 
8e30: 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61  onto overflow pa
8e40: 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c 6f 77 20  ges.  ^Overflow 
8e50: 70 61 67 65 73 20 66 6f 72 6d 20 61 20 6c 69 6e  pages form a lin
8e60: 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54 68 65 20  ked.list.  ^The 
8e70: 66 69 72 73 74 20 66 6f 75 72 20 62 79 74 65 73  first four bytes
8e80: 20 6f 66 20 65 61 63 68 20 6f 76 65 72 66 6c 6f   of each overflo
8e90: 77 20 70 61 67 65 20 61 72 65 20 61 20 62 69 67  w page are a big
8ea0: 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65 72 20  -endian.integer 
8eb0: 77 68 69 63 68 20 69 73 20 74 68 65 20 70 61 67  which is the pag
8ec0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
8ed0: 6e 65 78 74 20 70 61 67 65 20 69 6e 20 74 68 65  next page in the
8ee0: 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a   chain, or zero.
8ef0: 66 6f 72 20 74 68 65 20 66 69 6e 61 6c 20 70 61  for the final pa
8f00: 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e  ge in the chain.
8f10: 20 20 5e 54 68 65 20 66 69 66 74 68 20 62 79 74    ^The fifth byt
8f20: 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 61  e through the la
8f30: 73 74 20 75 73 61 62 6c 65 0a 62 79 74 65 20 61  st usable.byte a
8f40: 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  re used to hold 
8f50: 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65 6e 74  overflow content
8f60: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 37 20 50  .</p>..<h3>1.7 P
8f70: 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50 74  ointer Map or Pt
8f80: 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 33 3e 0a  rmap Pages</h3>.
8f90: 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70 20  .<p>Pointer map 
8fa0: 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65 73 20  or ptrmap pages 
8fb0: 61 72 65 20 65 78 74 72 61 20 70 61 67 65 73 20  are extra pages 
8fc0: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
8fd0: 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d 61  e database.to ma
8fe0: 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ke the operation
8ff0: 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d   of [auto_vacuum
9000: 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74  ] and [increment
9010: 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73  al_vacuum] modes
9020: 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74 2e  .more efficient.
9030: 20 20 4f 74 68 65 72 20 70 61 67 65 20 74 79 70    Other page typ
9040: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
9050: 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61 76  se typically hav
9060: 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d 20  e pointers.from 
9070: 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64 2e  parent to child.
9080: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61    For example, a
9090: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
90a0: 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  e page contains 
90b0: 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73 20  pointers.to its 
90c0: 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67  child b-tree pag
90d0: 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66 6c  es and an overfl
90e0: 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61 20 70  ow chain has a p
90f0: 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72 6c  ointer.from earl
9100: 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69 6e  ier to later lin
9110: 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e  ks in the chain.
9120: 20 20 41 20 70 74 72 6d 61 70 20 70 61 67 65 20    A ptrmap page 
9130: 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67 65  contains linkage
9140: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f 69  .information goi
9150: 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73 69  ng in the opposi
9160: 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66 72  te direction, fr
9170: 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65  om child to pare
9180: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72  nt.</p>..<p>^Ptr
9190: 6d 61 70 20 70 61 67 65 73 20 6d 75 73 74 20 65  map pages must e
91a0: 78 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74 61  xist in any data
91b0: 62 61 73 65 20 66 69 6c 65 20 77 68 69 63 68 20  base file which 
91c0: 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c  has a non-zero.l
91d0: 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72  argest root b-tr
91e0: 65 65 20 70 61 67 65 20 76 61 6c 75 65 20 61 74  ee page value at
91f0: 20 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74 68   offset 52 in th
9200: 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
9210: 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72 67 65  r..^If the large
9220: 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  st root b-tree p
9230: 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72  age value is zer
9240: 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  o, then the data
9250: 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63 6f  base must not.co
9260: 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67  ntain ptrmap pag
9270: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20  es.</p>..<p>^In 
9280: 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20  a database with 
9290: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74 68  ptrmap pages, th
92a0: 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20 70  e first ptrmap p
92b0: 61 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a 41  age is page 2..A
92c0: 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e   ptrmap page con
92d0: 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61  sists of an arra
92e0: 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72  y of 5-byte entr
92f0: 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20 74  ies.  Let J be t
9300: 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d 62  he.number of 5-b
9310: 79 74 65 20 65 6e 74 72 69 65 73 20 74 68 61 74  yte entries that
9320: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65   will fit in the
9330: 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f 66   usable space of
9340: 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74 68   a page..(In oth
9350: 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e  er words, J=U/5.
9360: 29 20 20 5e 54 68 65 20 66 69 72 73 74 20 70 74  )  ^The first pt
9370: 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20 63  rmap page will c
9380: 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69 6e  ontain back poin
9390: 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ter.information 
93a0: 66 6f 72 20 70 61 67 65 73 20 33 20 74 68 72 6f  for pages 3 thro
93b0: 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73 69  ugh J+2, inclusi
93c0: 76 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64  ve.  ^The second
93d0: 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61 67   pointer map.pag
93e0: 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61 67  e will be on pag
93f0: 65 20 4a 2b 33 20 61 6e 64 20 74 68 61 74 20 70  e J+3 and that p
9400: 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20  trmap page will 
9410: 70 72 6f 76 69 64 65 20 62 61 63 6b 20 70 6f 69  provide back poi
9420: 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  nter.information
9430: 20 66 6f 72 20 70 61 67 65 73 20 4a 2b 34 20 74   for pages J+4 t
9440: 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e 63  hrough 2*J+3 inc
9450: 6c 75 73 69 76 65 2e 20 20 41 6e 64 20 73 6f 20  lusive.  And so 
9460: 66 6f 72 74 68 20 66 6f 72 0a 74 68 65 20 65 6e  forth for.the en
9470: 74 69 72 65 20 64 61 74 61 62 61 73 65 20 66 69  tire database fi
9480: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e  le.</p>..<p>^(In
9490: 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61 74   a database that
94a0: 20 75 73 65 73 20 70 74 72 6d 61 70 20 70 61 67   uses ptrmap pag
94b0: 65 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61 74  es, all pages at
94c0: 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e 74   locations ident
94d0: 69 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f 6d  ified.by the com
94e0: 70 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65 20  putation in the 
94f0: 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61  previous paragra
9500: 70 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d 61  ph must be ptrma
9510: 70 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f 74  p page and no.ot
9520: 68 65 72 20 70 61 67 65 20 6d 61 79 20 62 65 20  her page may be 
9530: 61 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20 20  a ptrmap page.  
9540: 45 78 63 65 70 74 2c 20 69 66 20 74 68 65 20 62  Except, if the b
9550: 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68 61  yte-lock page ha
9560: 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e  ppens to.fall on
9570: 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20 6e   the same page n
9580: 75 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d 61  umber as a ptrma
9590: 70 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68 65  p page, then the
95a0: 20 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65 64   ptrmap is moved
95b0: 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  .to the followin
95c0: 67 20 70 61 67 65 20 66 6f 72 20 74 68 61 74 20  g page for that 
95d0: 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a  one case.)^</p>.
95e0: 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20  .<p>Each 5-byte 
95f0: 65 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d 61  entry on a ptrma
9600: 70 20 70 61 67 65 20 70 72 6f 76 69 64 65 73 20  p page provides 
9610: 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d  back-link inform
9620: 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e 65  ation about .one
9630: 20 6f 66 20 70 61 67 65 73 20 74 68 61 74 20 69   of pages that i
9640: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
9650: 77 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61  w the pointer ma
9660: 70 2e 20 20 5e 28 49 66 20 70 61 67 65 20 42 20  p.  ^(If page B 
9670: 69 73 20 61 0a 70 74 72 6d 61 70 20 70 61 67 65  is a.ptrmap page
9680: 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20   then back-link 
9690: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
96a0: 74 20 70 61 67 65 20 42 2b 31 20 69 73 20 70 72  t page B+1 is pr
96b0: 6f 76 69 64 65 64 20 62 79 0a 74 68 65 20 66 69  ovided by.the fi
96c0: 72 73 74 20 65 6e 74 72 79 20 6f 6e 20 74 68 65  rst entry on the
96d0: 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 49   pointer map.  I
96e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
96f0: 20 70 61 67 65 20 42 2b 32 20 69 73 0a 70 72 6f   page B+2 is.pro
9700: 76 69 64 65 64 20 62 79 20 74 68 65 20 73 65 63  vided by the sec
9710: 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e 64 20  ond entry.  And 
9720: 73 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70 3e 0a  so forth.)^</p>.
9730: 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20  .<p>Each 5-byte 
9740: 70 74 72 6d 61 70 20 65 6e 74 72 79 20 63 6f 6e  ptrmap entry con
9750: 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 62 79 74  sists of one byt
9760: 65 20 6f 66 20 22 70 61 67 65 20 74 79 70 65 22  e of "page type"
9770: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c   information.fol
9780: 6c 6f 77 65 64 20 62 79 20 61 20 34 2d 62 79 74  lowed by a 4-byt
9790: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67  e big-endian pag
97a0: 65 20 6e 75 6d 62 65 72 2e 20 20 46 69 76 65 20  e number.  Five 
97b0: 70 61 67 65 20 74 79 70 65 73 20 61 72 65 20 72  page types are r
97c0: 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a  ecognized:.</p>.
97d0: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72  .<ol>.<li>A b-tr
97e0: 65 65 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 54  ee root page.  T
97f0: 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 73  he.page number s
9800: 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e 0a 3c  hould be zero..<
9810: 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70 61  li>A freelist pa
9820: 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75  ge.  The page nu
9830: 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 7a  mber should be.z
9840: 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66 69 72  ero..<li>The fir
9850: 73 74 20 70 61 67 65 20 6f 66 20 61 0a 63 65 6c  st page of a.cel
9860: 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c  l payload overfl
9870: 6f 77 20 63 68 61 69 6e 2e 20 20 54 68 65 20 70  ow chain.  The p
9880: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68  age number is th
9890: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68  e b-tree page th
98a0: 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at.contains the 
98b0: 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e 74 65  cell whose conte
98c0: 6e 74 20 68 61 73 20 6f 76 65 72 66 6c 6f 77 65  nt has overflowe
98d0: 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20 69 6e  d..<li>A page in
98e0: 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61   an overflow cha
98f0: 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20 74 68  in.other than th
9900: 65 20 66 69 72 73 74 20 70 61 67 65 2e 20 20 54  e first page.  T
9910: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
9920: 73 20 74 68 65 20 70 72 69 6f 72 20 70 61 67 65  s the prior page
9930: 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77   of the.overflow
9940: 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f   chain..<li>A no
9950: 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  n-root b-tree pa
9960: 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75  ge.  The.page nu
9970: 6d 62 65 72 20 69 73 20 74 68 65 20 70 61 72 65  mber is the pare
9980: 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  nt b-tree page..
9990: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 6e  </ol>..<p>^In an
99a0: 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
99b0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 70 74  that contains pt
99c0: 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20  rmap pages, all 
99d0: 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65  b-tree root page
99e0: 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62 65 66  s .must come bef
99f0: 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74  ore any non-root
9a00: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 63 65   b-tree page, ce
9a10: 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66  ll payload overf
9a20: 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66 72 65  low page, or.fre
9a30: 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 69  elist page.  Thi
9a40: 73 20 72 65 73 74 72 69 63 74 69 6f 6e 20 65 6e  s restriction en
9a50: 73 75 72 65 73 20 74 68 61 74 20 61 20 72 6f 6f  sures that a roo
9a60: 74 20 70 61 67 65 20 77 69 6c 6c 20 6e 65 76 65  t page will neve
9a70: 72 0a 62 65 20 6d 6f 76 65 64 20 64 75 72 69 6e  r.be moved durin
9a80: 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  g an auto-vacuum
9a90: 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 2d   or incremental-
9aa0: 76 61 63 75 75 6d 2e 20 20 54 68 65 20 61 75 74  vacuum.  The aut
9ab0: 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63 20 64  o-vacuum.logic d
9ac0: 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 68 6f 77  oes not know how
9ad0: 20 74 6f 20 75 70 64 61 74 65 20 74 68 65 20 72   to update the r
9ae0: 6f 6f 74 5f 70 61 67 65 20 66 69 65 6c 64 20 6f  oot_page field o
9af0: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  f the sqlite_mas
9b00: 74 65 72 0a 74 61 62 6c 65 20 61 6e 64 20 73 6f  ter.table and so
9b10: 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
9b20: 20 74 6f 20 70 72 65 76 65 6e 74 20 72 6f 6f 74   to prevent root
9b30: 20 70 61 67 65 73 20 66 72 6f 6d 20 62 65 69 6e   pages from bein
9b40: 67 20 6d 6f 76 65 64 0a 64 75 72 69 6e 67 20 61  g moved.during a
9b50: 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 69 6e  n auto-vacuum in
9b60: 20 6f 72 64 65 72 20 74 6f 20 70 72 65 73 65 72   order to preser
9b70: 76 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  ve the integrity
9b80: 20 6f 66 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d   of the.sqlite_m
9b90: 61 73 74 65 72 20 74 61 62 6c 65 2e 20 20 5e 52  aster table.  ^R
9ba0: 6f 6f 74 20 70 61 67 65 73 20 61 72 65 20 6d 6f  oot pages are mo
9bb0: 76 65 64 20 74 6f 20 74 68 65 20 62 65 67 69 6e  ved to the begin
9bc0: 6e 69 6e 67 20 6f 66 20 74 68 65 0a 64 61 74 61  ning of the.data
9bd0: 62 61 73 65 20 66 69 6c 65 20 62 79 20 74 68 65  base file by the
9be0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 43   CREATE TABLE, C
9bf0: 52 45 41 54 45 20 49 4e 44 45 58 2c 20 44 52 4f  REATE INDEX, DRO
9c00: 50 20 54 41 42 4c 45 2c 20 61 6e 64 0a 44 52 4f  P TABLE, and.DRO
9c10: 50 20 49 4e 44 45 58 20 6f 70 65 72 61 74 69 6f  P INDEX operatio
9c20: 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 32 2e 30  ns.</p>..<h2>2.0
9c30: 20 53 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f 68   Schema Layer</h
9c40: 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65 67  2>..<p>The foreg
9c50: 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63 72 69  oing text descri
9c60: 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61 73  bes low-level as
9c70: 70 65 63 74 73 20 6f 66 20 74 68 65 20 53 51 4c  pects of the SQL
9c80: 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74 2e  ite file.format.
9c90: 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d 65 63    The b-tree mec
9ca0: 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65 73 20  hanism provides 
9cb0: 61 20 70 6f 77 65 72 66 75 6c 20 61 6e 64 20 65  a powerful and e
9cc0: 66 66 69 63 69 65 6e 74 20 6d 65 61 6e 73 20 6f  fficient means o
9cd0: 66 0a 61 63 63 65 73 73 69 6e 67 20 61 20 6c 61  f.accessing a la
9ce0: 72 67 65 20 64 61 74 61 20 73 65 74 2e 20 20 54  rge data set.  T
9cf0: 68 69 73 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c  his section will
9d00: 20 64 65 73 63 72 69 62 65 20 68 6f 77 20 74 68   describe how th
9d10: 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72  e.low-level b-tr
9d20: 65 65 20 6c 61 79 65 72 20 69 73 20 75 73 65 64  ee layer is used
9d30: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68 69   to implement hi
9d40: 67 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a 63  gher-level SQL.c
9d50: 61 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70 3e  apabilities.</p>
9d60: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
9d70: 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61 74  nt record_format
9d80: 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 7d   {record format}
9d90: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e 31 20 52  </tcl>.<h3>2.1 R
9da0: 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 68 33  ecord Format</h3
9db0: 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e 74 65 6e  >..<p>The conten
9dc0: 74 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74  t of a table b-t
9dd0: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e  ree leaf page an
9de0: 64 20 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 79  d the key.of any
9df0: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61   index b-tree pa
9e00: 67 65 20 77 61 73 20 63 68 61 72 61 63 74 65 72  ge was character
9e10: 69 7a 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e  ized above.as an
9e20: 20 61 72 62 69 74 72 61 72 79 20 73 65 71 75 65   arbitrary seque
9e30: 6e 63 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68  nce of bytes..Th
9e40: 65 20 70 72 69 6f 72 20 64 69 73 63 75 73 73 69  e prior discussi
9e50: 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65  on mentioned one
9e60: 20 6b 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20   key being less 
9e70: 74 68 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75  than another, bu
9e80: 74 0a 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65  t.did not define
9e90: 20 77 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e   what "less than
9ea0: 22 20 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75  " meant.  The cu
9eb0: 72 72 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69  rrent section wi
9ec0: 6c 6c 20 61 64 64 72 65 73 73 0a 74 68 65 73 65  ll address.these
9ed0: 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a   omissions.</p>.
9ee0: 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69 74  .<p>Payload, eit
9ef0: 68 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  her table conten
9f00: 74 20 6f 72 20 69 6e 64 65 78 20 6b 65 79 73 2c  t or index keys,
9f10: 20 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74 68   is always in th
9f20: 65 20 22 72 65 63 6f 72 64 0a 66 6f 72 6d 61 74  e "record.format
9f30: 22 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20 66  ".  The record f
9f40: 6f 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20  ormat defines a 
9f50: 73 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75  sequence of valu
9f60: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
9f70: 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61  .to columns in a
9f80: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
9f90: 20 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72    The record for
9fa0: 6d 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  mat specifies th
9fb0: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75  e number.of colu
9fc0: 6d 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79 70  mns, the datatyp
9fd0: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
9fe0: 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  , and the conten
9ff0: 74 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  t of each column
a000: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
a010: 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b 65  cord format make
a020: 73 20 65 78 74 65 6e 73 69 76 65 20 75 73 65 20  s extensive use 
a030: 6f 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62 6c  of the .[variabl
a040: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
a050: 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72 65  ] or [varint].re
a060: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
a070: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
a080: 74 65 67 65 72 73 20 64 65 66 69 6e 65 64 20 61  tegers defined a
a090: 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  bove.</p>..<tcl>
a0a0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72 69  hd_fragment seri
a0b0: 61 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20 74  altype {serial t
a0c0: 79 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79 70  ype} {serial typ
a0d0: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72  es}</tcl>.<p>A r
a0e0: 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 61  ecord contains a
a0f0: 20 68 65 61 64 65 72 20 61 6e 64 20 61 20 62 6f   header and a bo
a100: 64 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64 65  dy, in that orde
a110: 72 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64 65  r.  .^(The heade
a120: 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
a130: 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77 68  single varint wh
a140: 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74  ich determines t
a150: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 0a  he total number.
a160: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
a170: 68 65 61 64 65 72 2e 20 20 54 68 65 20 76 61 72  header.  The var
a180: 69 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68 65  int value is the
a190: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   size of the hea
a1a0: 64 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e 63  der in.bytes inc
a1b0: 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20  luding the size 
a1c0: 76 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29 5e  varint itself.)^
a1d0: 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65    ^Following the
a1e0: 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
a1f0: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64 64  .one or more add
a200: 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
a210: 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
a220: 20 20 54 68 65 73 65 20 61 64 64 69 74 69 6f 6e    These addition
a230: 61 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20 63  al varints.are c
a240: 61 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74 79  alled "serial ty
a250: 70 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a  pe" numbers and.
a260: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 61  determine the da
a270: 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  tatype of each c
a280: 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67  olumn, according
a290: 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
a2a0: 67 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63  g chart:</p>..<c
a2b0: 65 6e 74 65 72 3e 0a 5e 28 3c 69 3e 53 65 72 69  enter>.^(<i>Seri
a2c0: 61 6c 20 54 79 70 65 20 43 6f 64 65 73 20 4f 66  al Type Codes Of
a2d0: 20 54 68 65 20 52 65 63 6f 72 64 20 46 6f 72 6d   The Record Form
a2e0: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
a2f0: 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
a300: 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
a310: 53 65 72 69 61 6c 20 54 79 70 65 3c 74 68 3e 43  Serial Type<th>C
a320: 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d  ontent Size<th>M
a330: 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76  eaning.<tr><td v
a340: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a350: 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
a360: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a370: 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>0<td align=l
a380: 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74 72 3e 3c 74  eft>.NULL.<tr><t
a390: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a3a0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 76  gn=center>1<td v
a3b0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a3c0: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
a3d0: 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69 74 20 74 77  n=left>.8-bit tw
a3e0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
a3f0: 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  teger.<tr><td va
a400: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a410: 65 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67  enter>2<td valig
a420: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a430: 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>2<td align=le
a440: 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 31  ft>.Big-endian 1
a450: 36 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  6-bit twos-compl
a460: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74  ement integer.<t
a470: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a480: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c   align=center>3<
a490: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a4a0: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20  ign=center>3<td 
a4b0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d  align=left>.Big-
a4c0: 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20 74 77  endian 24-bit tw
a4d0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
a4e0: 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  teger.<tr><td va
a4f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a500: 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67  enter>4<td valig
a510: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a520: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
a530: 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 33  ft>.Big-endian 3
a540: 32 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  2-bit twos-compl
a550: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74  ement integer.<t
a560: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a570: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c   align=center>5<
a580: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a590: 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20  ign=center>6<td 
a5a0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d  align=left>.Big-
a5b0: 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20 74 77  endian 48-bit tw
a5c0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
a5d0: 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  teger.<tr><td va
a5e0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a5f0: 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c 69 67  enter>6<td valig
a600: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a610: 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>8<td align=le
a620: 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 36  ft>.Big-endian 6
a630: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
a640: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74  ement integer.<t
a650: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a660: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 3c   align=center>7<
a670: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a680: 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20  ign=center>8<td 
a690: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d  align=left>.Big-
a6a0: 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d  endian IEEE 754-
a6b0: 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61  2008 64-bit floa
a6c0: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
a6d0: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
a6e0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a6f0: 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>8<td valign=to
a700: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
a710: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a720: 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e 74  Integer constant
a730: 20 30 2e 20 20 4f 6e 6c 79 20 61 76 61 69 6c 61   0.  Only availa
a740: 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61 20 66  ble for schema f
a750: 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69 67 68  ormat 4 and high
a760: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
a770: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a780: 74 65 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>9<td valign=
a790: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a7a0: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >0<td align=left
a7b0: 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61  >.Integer consta
a7c0: 6e 74 20 31 2e 20 20 4f 6e 6c 79 20 61 76 61 69  nt 1.  Only avai
a7d0: 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61  lable for schema
a7e0: 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69   format 4 and hi
a7f0: 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  gher..<tr><td va
a800: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a810: 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20 20  enter>10,11.    
a820: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a830: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62 73  lign=center>&nbs
a840: 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  p;<td align=left
a850: 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20 20  >.<i>Not used.  
a860: 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78 70  Reserved for exp
a870: 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e  ansion.</i>.<tr>
a880: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a890: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78  lign=center>N&#x
a8a0: 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76 65 6e  2265;12 and even
a8b0: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
a8c0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a8d0: 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c 69  >(N-12)/2<td ali
a8e0: 67 6e 3d 6c 65 66 74 3e 0a 41 20 42 4c 4f 42 20  gn=left>.A BLOB 
a8f0: 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f 32  that is (N-12)/2
a900: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
a910: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
a920: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a930: 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61 6e 64  >N&#x2265;13 and
a940: 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76 61 6c   odd.    <td val
a950: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a960: 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74 64  nter>(N-13)/2<td
a970: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 73   align=left>.A s
a980: 74 72 69 6e 67 20 69 6e 20 74 68 65 20 64 61 74  tring in the dat
a990: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 61  abase encoding a
a9a0: 6e 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65  nd (N-13)/2 byte
a9b0: 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 54 68 65  s in length..The
a9c0: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
a9d0: 69 73 20 6f 6d 69 74 74 65 64 2e 0a 3c 2f 74 61  is omitted..</ta
a9e0: 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  ble></center>)^.
a9f0: 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 62 65  .<p>Note that be
aa00: 63 61 75 73 65 20 6f 66 20 74 68 65 20 77 61 79  cause of the way
aa10: 20 76 61 72 69 6e 74 73 20 61 72 65 20 64 65 66   varints are def
aa20: 69 6e 65 64 2c 20 74 68 65 20 68 65 61 64 65 72  ined, the header
aa30: 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e 64   size varint.and
aa40: 20 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72   serial type var
aa50: 69 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c 6c  ints will usuall
aa60: 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 73  y consist of a s
aa70: 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
aa80: 0a 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72  .serial type var
aa90: 69 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20 73  ints for large s
aaa0: 74 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 73  trings and BLOBs
aab0: 20 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74 6f   might extend to
aac0: 20 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62 79   two or three.by
aad0: 74 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74 20  te varints, but 
aae0: 74 68 61 74 20 69 73 20 74 68 65 20 65 78 63 65  that is the exce
aaf0: 70 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68 61  ption rather tha
ab00: 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68 65  n the rule. .The
ab10: 20 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20 69   varint format i
ab20: 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
ab30: 20 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20 72   at coding the r
ab40: 65 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f 70  ecord header.</p
ab50: 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 73  >..<p>The values
ab60: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
ab70: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
ab80: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
ab90: 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a 5e 28  w the header..^(
aba0: 4e 6f 74 65 20 74 68 61 74 20 66 6f 72 20 73 65  Note that for se
abb0: 72 69 61 6c 20 74 79 70 65 73 20 30 2c 20 38 2c  rial types 0, 8,
abc0: 20 39 2c 20 31 32 2c 20 61 6e 64 20 31 33 2c 20   9, 12, and 13, 
abd0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72  the value is zer
abe0: 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65 6e 67 74  o bytes in.lengt
abf0: 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f 6c 75 6d  h.  If all colum
ac00: 6e 73 20 61 72 65 20 6f 66 20 74 68 65 73 65 20  ns are of these 
ac10: 74 79 70 65 73 20 74 68 65 6e 20 74 68 65 20 62  types then the b
ac20: 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f 66 20 74  ody section of t
ac30: 68 65 0a 72 65 63 6f 72 64 20 69 73 20 65 6d 70  he.record is emp
ac40: 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32  ty.)^</p>..<h3>2
ac50: 2e 32 20 52 65 63 6f 72 64 20 53 6f 72 74 20 4f  .2 Record Sort O
ac60: 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  rder</h3>..<p>Th
ac70: 65 20 6f 72 64 65 72 20 6f 66 20 6b 65 79 73 20  e order of keys 
ac80: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
ac90: 65 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ee is determined
aca0: 20 62 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64   by the sort ord
acb0: 65 72 20 6f 66 0a 74 68 65 20 72 65 63 6f 72 64  er of.the record
acc0: 73 20 74 68 61 74 20 74 68 65 20 6b 65 79 73 20  s that the keys 
acd0: 72 65 70 72 65 73 65 6e 74 2e 20 20 52 65 63 6f  represent.  Reco
ace0: 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e 20 70 72  rd comparison pr
acf0: 6f 67 72 65 73 73 65 73 20 63 6f 6c 75 6d 6e 0a  ogresses column.
ad00: 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75  by column.  Colu
ad10: 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f 72 64 20  mns of a record 
ad20: 61 72 65 20 65 78 61 6d 69 6e 65 64 20 66 72 6f  are examined fro
ad30: 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
ad40: 20 20 54 68 65 0a 66 69 72 73 74 20 70 61 69 72    The.first pair
ad50: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
ad60: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 64   are not equal d
ad70: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 72 65  etermines the re
ad80: 6c 61 74 69 76 65 20 6f 72 64 65 72 0a 6f 66 20  lative order.of 
ad90: 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 2e  the two records.
ada0: 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72    The sort order
adb0: 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20 63   of individual c
adc0: 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66 6f 6c  olumns is as.fol
add0: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  lows:</p>..<ol>.
ade0: 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76 61 6c 75 65  <li>^(NULL value
adf0: 73 20 28 73 65 72 69 61 6c 20 74 79 70 65 20 30  s (serial type 0
ae00: 29 20 73 6f 72 74 20 66 69 72 73 74 2e 29 5e 0a  ) sort first.)^.
ae10: 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69 63 20 76 61  <li>^(Numeric va
ae20: 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70  lues (serial typ
ae30: 65 73 20 31 20 74 68 72 6f 75 67 68 20 39 29 20  es 1 through 9) 
ae40: 73 6f 72 74 20 61 66 74 65 72 20 4e 55 4c 4c 73  sort after NULLs
ae50: 0a 20 20 20 20 20 20 61 6e 64 20 69 6e 20 6e 75  .      and in nu
ae60: 6d 65 72 69 63 20 6f 72 64 65 72 2e 29 5e 0a 3c  meric order.)^.<
ae70: 6c 69 3e 5e 28 54 65 78 74 20 76 61 6c 75 65 73  li>^(Text values
ae80: 20 28 6f 64 64 20 73 65 72 69 61 6c 20 74 79 70   (odd serial typ
ae90: 65 73 20 31 33 20 61 6e 64 20 6c 61 72 67 65 72  es 13 and larger
aea0: 29 20 73 6f 72 74 20 61 66 74 65 72 20 6e 75 6d  ) sort after num
aeb0: 65 72 69 63 0a 20 20 20 20 76 61 6c 75 65 73 20  eric.    values 
aec0: 69 6e 20 74 68 65 20 6f 72 64 65 72 20 64 65 74  in the order det
aed0: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 63  ermined by the c
aee0: 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e  olumns [collatin
aef0: 67 20 66 75 6e 63 74 69 6f 6e 5d 2e 29 5e 0a 3c  g function].)^.<
af00: 6c 69 3e 5e 28 42 4c 4f 42 20 76 61 6c 75 65 73  li>^(BLOB values
af10: 20 28 65 76 65 6e 20 73 65 72 69 61 6c 20 74 79   (even serial ty
af20: 70 65 73 20 31 32 20 61 6e 64 20 6c 61 72 67 65  pes 12 and large
af30: 72 29 20 73 6f 72 74 20 6c 61 73 74 20 61 6e 64  r) sort last and
af40: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 0a 20   in the order . 
af50: 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79     determined by
af60: 20 6d 65 6d 63 6d 70 28 29 2e 29 5e 0a 3c 2f 6f   memcmp().)^.</o
af70: 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74  l>..<p>A [collat
af80: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 20 66 6f  ing function] fo
af90: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  r each column is
afa0: 20 6e 65 63 65 73 73 61 72 79 20 69 6e 20 6f 72   necessary in or
afb0: 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74  der to compute.t
afc0: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 65 78 74  he order of text
afd0: 20 66 69 65 6c 64 73 2e 0a 5e 28 53 51 4c 69 74   fields..^(SQLit
afe0: 65 20 64 65 66 69 6e 65 73 20 74 68 72 65 65 20  e defines three 
aff0: 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69  built-in collati
b000: 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a 29 5e 0a  ng functions:)^.
b010: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
b020: 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  e><table border=
b030: 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 31 30  0 cellspacing=10
b040: 3e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69 67  >.<tr>^<td valig
b050: 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a 20 20 20  n=top>BINARY.   
b060: 20 3c 74 64 3e 53 74 72 69 6e 67 73 20 61 72 65   <td>Strings are
b070: 20 63 6f 6d 70 61 72 65 64 20 62 79 74 65 20 62   compared byte b
b080: 79 20 62 79 74 65 20 75 73 69 6e 67 20 74 68 65  y byte using the
b090: 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74 69   memcmp() functi
b0a0: 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f 6d 20  on.        from 
b0b0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
b0c0: 69 62 72 61 72 79 2e 0a 3c 74 72 3e 5e 3c 74 64  ibrary..<tr>^<td
b0d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41   valign=top>NOCA
b0e0: 53 45 0a 20 20 20 20 3c 74 64 3e 4c 69 6b 65 20  SE.    <td>Like 
b0f0: 42 49 4e 41 52 59 20 65 78 63 65 70 74 20 74 68  BINARY except th
b100: 61 74 20 75 70 70 65 72 63 61 73 65 20 41 53 43  at uppercase ASC
b110: 49 49 20 63 68 61 72 61 63 74 65 72 73 20 28 27  II characters ('
b120: 41 27 20 74 68 72 6f 75 67 68 20 27 5a 27 29 0a  A' through 'Z').
b130: 20 20 20 20 20 20 20 20 61 72 65 20 66 6f 6c 64          are fold
b140: 65 64 20 69 6e 74 6f 20 74 68 65 69 72 20 6c 6f  ed into their lo
b150: 77 65 72 63 61 73 65 20 65 71 75 69 76 61 6c 65  wercase equivale
b160: 6e 74 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e  nts prior to run
b170: 6e 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20  ning the.       
b180: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4e 6f   comparison.  No
b190: 74 65 20 74 68 61 74 20 6f 6e 6c 79 20 41 53 43  te that only ASC
b1a0: 49 49 20 63 68 61 72 61 63 74 65 72 73 20 61 72  II characters ar
b1b0: 65 20 63 61 73 65 2d 66 6f 6c 64 65 64 2e 20 20  e case-folded.  
b1c0: 5e 4e 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20  ^NOCASE.        
b1d0: 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65  does not impleme
b1e0: 6e 74 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72  nt a general pur
b1f0: 70 6f 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73  pose unicode cas
b200: 65 6c 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e  eless comparison
b210: 2e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69 67  ..<tr>^<td valig
b220: 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20  n=top>RTRIM.    
b230: 3c 74 64 3e 4c 69 6b 65 20 42 49 4e 41 52 59 20  <td>Like BINARY 
b240: 65 78 63 65 70 74 20 74 68 61 74 20 73 70 61 63  except that spac
b250: 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
b260: 20 74 68 65 20 73 74 72 69 6e 67 20 61 72 65 20   the string are 
b270: 65 6c 69 64 65 64 0a 20 20 20 20 20 20 20 20 70  elided.        p
b280: 72 69 6f 72 20 74 6f 20 63 6f 6d 70 61 72 69 73  rior to comparis
b290: 6f 6e 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c  on..</table></bl
b2a0: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41  ockquote>..<p>^A
b2b0: 64 64 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63  dditional applic
b2c0: 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63  ation-specific c
b2d0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
b2e0: 6e 73 20 63 61 6e 20 62 65 20 61 64 64 65 64 20  ns can be added 
b2f0: 74 6f 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20  to.SQLite using 
b300: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
b310: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d  ate_collation()]
b320: 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a   interface.</p>.
b330: 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74  .<p>^The default
b340: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
b350: 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
b360: 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e  ngs is BINARY..^
b370: 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c  Alternative coll
b380: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20  ating functions 
b390: 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  for table column
b3a0: 73 20 63 61 6e 20 62 65 20 73 70 65 63 69 66 69  s can be specifi
b3b0: 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54  ed in the.[CREAT
b3c0: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
b3d0: 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c  nt using the COL
b3e0: 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74  LATE clause on t
b3f0: 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  he [column defin
b400: 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20  ition]..^When a 
b410: 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65  column is indexe
b420: 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c  d, the same coll
b430: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
b440: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a  pecified in the.
b450: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
b460: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
b470: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
b480: 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79  in the index, by
b490: 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68   default,.though
b4a0: 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65   this can be ove
b4b0: 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20  rridden using a 
b4c0: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69  COLLATE clause i
b4d0: 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49  n the .[CREATE I
b4e0: 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e  NDEX] statement.
b4f0: 0a 0a 3c 68 33 3e 32 2e 33 20 52 65 70 72 65 73  ..<h3>2.3 Repres
b500: 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20  entation Of SQL 
b510: 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  Tables</h3>..<p>
b520: 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51  Each ordinary SQ
b530: 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  L table in the d
b540: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
b550: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e  s represented on
b560: 20 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65   disk.by a table
b570: 20 62 2d 74 72 65 65 2e 20 20 45 61 63 68 20 65   b-tree.  Each e
b580: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
b590: 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70  e b-tree corresp
b5a0: 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66  onds to a row.of
b5b0: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e 20   the SQL table. 
b5c0: 20 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20   The [rowid] of 
b5d0: 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 69 73  the SQL table is
b5e0: 20 74 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e   the 64-bit sign
b5f0: 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79 20 66  ed.integer key f
b600: 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e  or each entry in
b610: 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65   the table b-tre
b620: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63  e.</p>..<p>The c
b630: 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53  ontent of each S
b640: 51 4c 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  QL table row is 
b650: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
b660: 74 61 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66  tabase file by.f
b670: 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74  irst combining t
b680: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  he values in the
b690: 20 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73   various columns
b6a0: 20 69 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72   into a byte arr
b6b0: 61 79 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ay.in the record
b6c0: 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74   format, then st
b6d0: 6f 72 69 6e 67 20 74 68 61 74 20 62 79 74 65 20  oring that byte 
b6e0: 61 72 72 61 79 20 61 73 20 74 68 65 20 70 61 79  array as the pay
b6f0: 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79  load in.an entry
b700: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
b710: 74 72 65 65 2e 20 20 5e 54 68 65 20 6f 72 64 65  tree.  ^The orde
b720: 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74  r of values in t
b730: 68 65 20 72 65 63 6f 72 64 20 69 73 0a 74 68 65  he record is.the
b740: 20 73 61 6d 65 20 61 73 20 74 68 65 20 6f 72 64   same as the ord
b750: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
b760: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 64   the SQL table d
b770: 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e  efinition..^When
b780: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 74 68   an SQL table th
b790: 61 74 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b  at includes an.[
b7a0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
b7b0: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69  KEY] column (whi
b7c0: 63 68 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b  ch aliases the [
b7d0: 72 6f 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61  rowid]) then tha
b7e0: 74 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73  t.column appears
b7f0: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
b800: 73 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20  s a NULL value. 
b810: 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c   ^SQLite will al
b820: 77 61 79 73 20 75 73 65 0a 74 68 65 20 74 61 62  ways use.the tab
b830: 6c 65 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61  le b-tree key ra
b840: 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55  ther than the NU
b850: 4c 4c 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65  LL value when re
b860: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49  ferencing the.[I
b870: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
b880: 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a  EY] column.</p>.
b890: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 5b 61 66 66  .<p>^If the [aff
b8a0: 69 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75  inity] of a colu
b8b0: 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74  mn is REAL and t
b8c0: 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  hat column conta
b8d0: 69 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74  ins a.value that
b8e0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65   can be converte
b8f0: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
b900: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
b910: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20  information.(if 
b920: 74 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  the value contai
b930: 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c  ns no fractional
b940: 20 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74   part and is not
b950: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65   too large to be
b960: 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20  .represented as 
b970: 61 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e  an integer) then
b980: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20   the column may 
b990: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  be stored in the
b9a0: 20 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e   record.as an in
b9b0: 74 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20  teger.  ^SQLite 
b9c0: 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65  will convert the
b9d0: 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66   value back to f
b9e0: 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68  loating.point wh
b9f0: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74  en extracting it
ba00: 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
ba10: 2e 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 32 2e 34 20  .</p>...<h3>2.4 
ba20: 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f  Representation O
ba30: 66 20 53 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68  f SQL Indices</h
ba40: 33 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 53 51 4c  3>..<p>^Each SQL
ba50: 20 69 6e 64 65 78 2c 20 77 68 65 74 68 65 72 20   index, whether 
ba60: 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61  explicitly decla
ba70: 72 65 64 20 76 69 61 20 61 20 5b 43 52 45 41 54  red via a [CREAT
ba80: 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
ba90: 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62 79  nt.or implied by
baa0: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
bab0: 61 69 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e 64  aint, correspond
bac0: 73 20 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d  s to an index b-
bad0: 74 72 65 65 20 69 6e 20 74 68 65 0a 64 61 74 61  tree in the.data
bae0: 62 61 73 65 20 66 69 6c 65 2e 0a 5e 54 68 65 72  base file..^Ther
baf0: 65 20 69 73 20 6f 6e 65 20 65 6e 74 72 79 20 69  e is one entry i
bb00: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 66  n index b-tree f
bb10: 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
bb20: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
bb30: 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6b 65 79   table..^The key
bb40: 20 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d 74   to an index b-t
bb50: 72 65 65 20 69 73 0a 61 20 72 65 63 6f 72 64 20  ree is.a record 
bb60: 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20  composed of the 
bb70: 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
bb80: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 66   being indexed f
bb90: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a 5b  ollowed by the.[
bba0: 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 74 61  rowid] of the ta
bbb0: 62 6c 65 20 72 6f 77 2e 20 20 42 65 63 61 75 73  ble row.  Becaus
bbc0: 65 20 65 76 65 72 79 20 72 6f 77 20 69 6e 20 61  e every row in a
bbd0: 20 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69   table has a uni
bbe0: 71 75 65 0a 72 6f 77 69 64 20 61 6e 64 20 61 6c  que.rowid and al
bbf0: 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  l keys in an ind
bc00: 65 78 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 72  ex contain the r
bc10: 6f 77 69 64 2c 20 61 6c 6c 20 6b 65 79 73 20 69  owid, all keys i
bc20: 6e 20 61 6e 20 69 6e 64 65 78 0a 61 72 65 20 75  n an index.are u
bc30: 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  nique.</p>..<p>^
bc40: 54 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74  There is a one-t
bc50: 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65  o-one mapping be
bc60: 74 77 65 65 6e 20 72 6f 77 73 20 69 6e 20 61 20  tween rows in a 
bc70: 74 61 62 6c 65 20 61 6e 64 0a 65 6e 74 72 69 65  table and.entrie
bc80: 73 20 69 6e 20 65 61 63 68 20 69 6e 64 65 78 20  s in each index 
bc90: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
bca0: 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 43 6f 72  that table..^Cor
bcb0: 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 73 20  responding rows 
bcc0: 69 6e 74 20 74 68 65 20 69 6e 64 65 78 20 61 6e  int the index an
bcd0: 64 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  d table b-trees 
bce0: 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 72  share the same r
bcf0: 6f 77 69 64 0a 76 61 6c 75 65 2c 20 61 6e 64 20  owid.value, and 
bd00: 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65  contain the same
bd10: 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69   value for all i
bd20: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c  ndexed columns.<
bd30: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
bd40: 67 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73  gment sqlite_mas
bd50: 74 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  ter {sqlite_mast
bd60: 65 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  er} {sqlite_mast
bd70: 65 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a  er table}</tcl>.
bd80: 3c 68 33 3e 32 2e 35 20 53 74 6f 72 61 67 65 20  <h3>2.5 Storage 
bd90: 4f 66 20 54 68 65 20 53 51 4c 20 44 61 74 61 62  Of The SQL Datab
bda0: 61 73 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a  ase Schema</h3>.
bdb0: 0a 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61  .<p>^Page 1 of a
bdc0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
bdd0: 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  s the root page 
bde0: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
bdf0: 65 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73  e that.holds a s
be00: 70 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d  pecial table nam
be10: 65 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  ed "sqlite_maste
be20: 72 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74  r" (or "sqlite_t
be30: 65 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74  emp_master" in.t
be40: 68 65 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d  he case of a TEM
be50: 50 20 64 61 74 61 62 61 73 65 29 20 77 68 69 63  P database) whic
be60: 68 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d  h stores the com
be70: 70 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20 73  plete.database s
be80: 63 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74  chema.  ^(The st
be90: 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73  ructure of the s
bea0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
beb0: 6c 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68  le is as.if it h
bec0: 61 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20  ad been created 
bed0: 75 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77  using the follow
bee0: 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62  ing SQL:</p>..<b
bef0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
bf00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
bf10: 69 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79  ite_master(.  ty
bf20: 70 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20  pe text,.  name 
bf30: 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65  text,.  tbl_name
bf40: 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67   text,.  rootpag
bf50: 65 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c  e integer,.  sql
bf60: 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c   text.);.</pre><
bf70: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
bf80: 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d  <p>^The sqlite_m
bf90: 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74  aster table cont
bfa0: 61 69 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72  ains one row for
bfb0: 20 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64   each table, ind
bfc0: 65 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72  ex, view,.and tr
bfd0: 69 67 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76  igger (collectiv
bfe0: 65 6c 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69  ely "objects") i
bff0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
c000: 63 68 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68  chema, except th
c010: 65 72 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20  ere.is no entry 
c020: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  for the sqlite_m
c030: 61 73 74 65 72 20 74 61 62 6c 65 20 69 74 73 65  aster table itse
c040: 6c 66 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65  lf.  ^The sqlite
c050: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f  _master table.co
c060: 6e 74 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66  ntains entries f
c070: 6f 72 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68  or [internal sch
c080: 65 6d 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20  ema objects] in 
c090: 61 64 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c  addition to appl
c0a0: 69 63 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f  ication-.and pro
c0b0: 67 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20  grammer-defined 
c0c0: 6f 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28  objects....<p>^(
c0d0: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
c0e0: 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69  r.type column wi
c0f0: 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65  ll be one.of the
c100: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20   following text 
c110: 73 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65  strings:  'table
c120: 27 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65  ', 'index', 'vie
c130: 77 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27  w', or 'trigger'
c140: 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68  .according to th
c150: 65 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74  e type of object
c160: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27   defined.  The '
c170: 74 61 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73  table' string is
c180: 20 75 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f   used.for both o
c190: 72 64 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72  rdinary and [vir
c1a0: 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c  tual tables].)^<
c1b0: 2f 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65 20 73  /p>..</p>^(The s
c1c0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d  qlite_master.nam
c1d0: 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f  e column will ho
c1e0: 6c 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ld the name of t
c1f0: 68 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b  he object.)^.^([
c200: 55 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49  UNIQUE] and [PRI
c210: 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72  MARY KEY] constr
c220: 61 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65 73 20  aints on tables 
c230: 63 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20  cause SQLite to 
c240: 63 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c  create.[internal
c250: 20 69 6e 64 69 63 65 73 5d 20 77 69 74 68 20 6e   indices] with n
c260: 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ames of the form
c270: 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   "sqlite_autoind
c280: 65 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72  ex_TABLE_N".wher
c290: 65 20 54 41 42 4c 45 20 69 73 20 72 65 70 6c 61  e TABLE is repla
c2a0: 63 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20  ced by the name 
c2b0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
c2c0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63  t contains the.c
c2d0: 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20  onstraint and N 
c2e0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
c2f0: 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 20 61  ginning with 1 a
c300: 6e 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79  nd increasing by
c310: 20 6f 6e 65 0a 77 69 74 68 20 65 61 63 68 20 63   one.with each c
c320: 6f 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 20 69  onstraint seen i
c330: 6e 20 74 68 65 20 74 61 62 6c 65 20 64 65 66 69  n the table defi
c340: 6e 69 74 69 6f 6e 2e 29 5e 3c 2f 70 3e 0a 0a 3c  nition.)^</p>..<
c350: 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  p>The sqlite_mas
c360: 74 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  ter.tbl_name col
c370: 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  umn holds the na
c380: 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72  me of a table or
c390: 20 76 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f   view.that the o
c3a0: 62 6a 65 63 74 20 69 73 20 61 73 73 6f 63 69 61  bject is associa
c3b0: 74 65 64 20 77 69 74 68 2e 20 20 5e 46 6f 72 20  ted with.  ^For 
c3c0: 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c  a table or view,
c3d0: 20 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f   the.tbl_name co
c3e0: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f  lumn is a copy o
c3f0: 66 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d  f the name colum
c400: 6e 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65  n.  ^For an inde
c410: 78 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a  x, the tbl_name.
c420: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
c430: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
c440: 20 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f 72 20   indexed.  ^For 
c450: 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 74  a trigger, the t
c460: 62 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73  bl_name.column s
c470: 74 6f 72 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  tores the name o
c480: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
c490: 69 65 77 20 74 68 61 74 20 63 61 75 73 65 73 20  iew that causes 
c4a0: 74 68 65 20 74 72 69 67 67 65 72 20 0a 74 6f 20  the trigger .to 
c4b0: 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  fire.</p>..<p>^(
c4c0: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
c4d0: 72 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d  r.rootpage colum
c4e0: 6e 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  n stores the pag
c4f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
c500: 72 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65  root.b-tree page
c510: 20 66 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20   for tables and 
c520: 69 6e 64 69 63 65 73 2e 29 5e 20 20 5e 46 6f 72  indices.)^  ^For
c530: 20 72 6f 77 73 20 74 68 61 74 20 64 65 66 69 6e   rows that defin
c540: 65 20 76 69 65 77 73 2c 20 74 72 69 67 67 65 72  e views, trigger
c550: 73 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c 20 74  s,.and virtual t
c560: 61 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74 70  ables, the rootp
c570: 61 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20  age column is 0 
c580: 6f 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70  or NULL.</p>..<p
c590: 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  >^(The sqlite_ma
c5a0: 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20  ster.sql column 
c5b0: 73 74 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20  stores SQL text 
c5c0: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
c5d0: 68 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73  he.object.  This
c5e0: 20 53 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b   SQL text is a [
c5f0: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b  CREATE TABLE], [
c600: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
c610: 41 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49  ABLE],.[CREATE I
c620: 4e 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56  NDEX],.[CREATE V
c630: 49 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45  IEW], or [CREATE
c640: 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
c650: 65 6e 74 20 74 68 61 74 20 69 66 20 65 76 61 6c  ent that if eval
c660: 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68  uated against.th
c670: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
c680: 77 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d  when it is the m
c690: 61 69 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20  ain database of 
c6a0: 61 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  a [database conn
c6b0: 65 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65  ection].would re
c6c0: 63 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65  created the obje
c6d0: 63 74 2e 29 5e 20 20 54 68 65 20 74 65 78 74 20  ct.)^  The text 
c6e0: 69 73 20 75 73 75 61 6c 6c 79 20 61 20 63 6f 70  is usually a cop
c6f0: 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  y of the origina
c700: 6c 0a 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  l.statement used
c710: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 6f   to create the o
c720: 62 6a 65 63 74 20 62 75 74 20 77 69 74 68 20 6e  bject but with n
c730: 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 73 20 61 70  ormalizations ap
c740: 70 6c 69 65 64 20 73 6f 0a 74 68 61 74 20 74 68  plied so.that th
c750: 65 20 74 65 78 74 20 63 6f 6e 66 6f 72 6d 73 20  e text conforms 
c760: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
c770: 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c   rules:..<ul>.<l
c780: 69 3e 5e 54 68 65 20 43 52 45 41 54 45 2c 20 54  i>^The CREATE, T
c790: 41 42 4c 45 2c 20 56 49 45 57 2c 20 54 52 49 47  ABLE, VIEW, TRIG
c7a0: 47 45 52 2c 20 61 6e 64 20 49 4e 44 45 58 20 6b  GER, and INDEX k
c7b0: 65 79 77 6f 72 64 73 20 61 74 20 74 68 65 20 62  eywords at the b
c7c0: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
c7d0: 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 63 6f  statement are co
c7e0: 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c 20 75  nverted to all u
c7f0: 70 70 65 72 20 63 61 73 65 20 6c 65 74 74 65 72  pper case letter
c800: 73 2e 0a 3c 6c 69 3e 5e 54 68 65 20 54 45 4d 50  s..<li>^The TEMP
c810: 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20 6b 65   or TEMPORARY ke
c820: 79 77 6f 72 64 20 69 73 20 72 65 6d 6f 76 65 64  yword is removed
c830: 20 69 66 20 69 74 20 6f 63 63 75 72 73 20 61 66   if it occurs af
c840: 74 65 72 20 74 68 65 20 0a 69 6e 69 74 69 61 6c  ter the .initial
c850: 20 43 52 45 41 54 45 20 6b 65 79 77 6f 72 64 2e   CREATE keyword.
c860: 0a 3c 6c 69 3e 5e 41 6e 79 20 64 61 74 61 62 61  .<li>^Any databa
c870: 73 65 20 6e 61 6d 65 20 71 75 61 6c 69 66 69 65  se name qualifie
c880: 72 20 74 68 61 74 20 6f 63 63 75 72 73 20 70 72  r that occurs pr
c890: 69 6f 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ior to the name 
c8a0: 6f 66 20 74 68 65 0a 6f 62 6a 65 63 74 20 62 65  of the.object be
c8b0: 69 6e 67 20 63 72 65 61 74 65 64 20 69 73 20 72  ing created is r
c8c0: 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61  emoved..<li>^Lea
c8d0: 64 69 6e 67 20 73 70 61 63 65 73 20 61 72 65 20  ding spaces are 
c8e0: 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c  removed..<li>^Al
c8f0: 6c 20 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77 69  l spaces followi
c900: 6e 67 20 74 68 65 20 66 69 72 73 74 20 74 77 6f  ng the first two
c910: 20 6b 65 79 77 6f 72 64 73 20 61 72 65 20 63 6f   keywords are co
c920: 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73  nverted into a s
c930: 69 6e 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f 75  ingle.space..</u
c940: 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 74 65 78  l>..<p>^(The tex
c950: 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  t in the sqlite_
c960: 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d  master.sql colum
c970: 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74  n is a copy of t
c980: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 43 52 45 41  he original.CREA
c990: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78  TE statement tex
c9a0: 74 20 74 68 61 74 20 63 72 65 61 74 65 64 20 74  t that created t
c9b0: 68 65 20 6f 62 6a 65 63 74 2c 20 65 78 63 65 70  he object, excep
c9c0: 74 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 73 0a  t normalized as.
c9d0: 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65 20  described above 
c9e0: 61 6e 64 20 61 73 20 6d 6f 64 69 66 69 65 64 20  and as modified 
c9f0: 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 5b 41  by subsequent [A
ca00: 4c 54 45 52 20 54 41 42 4c 45 5d 20 73 74 61 74  LTER TABLE] stat
ca10: 65 6d 65 6e 74 73 2e 29 5e 0a 5e 28 54 68 65 20  ements.)^.^(The 
ca20: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71  sqlite_master.sq
ca30: 6c 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 74 68  l is NULL for th
ca40: 65 20 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 69  e [internal indi
ca50: 63 65 73 5d 20 74 68 61 74 20 61 72 65 0a 61 75  ces] that are.au
ca60: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
ca70: 74 65 64 20 62 79 20 5b 55 4e 49 51 55 45 5d 20  ted by [UNIQUE] 
ca80: 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d  or [PRIMARY KEY]
ca90: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 3c   constraints.)^<
caa0: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /p>...<tcl>hd_fr
cab0: 61 67 6d 65 6e 74 20 69 6e 74 73 63 68 65 6d 61  agment intschema
cac0: 20 7b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d   {internal schem
cad0: 61 20 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e  a objects} \.{in
cae0: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
caf0: 6a 65 63 74 7d 20 7b 69 6e 74 65 72 6e 61 6c 20  ject} {internal 
cb00: 69 6e 64 65 78 7d 20 7b 69 6e 74 65 72 6e 61 6c  index} {internal
cb10: 20 69 6e 64 69 63 65 73 7d 20 5c 0a 7b 69 6e 74   indices} \.{int
cb20: 65 72 6e 61 6c 20 74 61 62 6c 65 7d 20 7b 69 6e  ernal table} {in
cb30: 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 7d 3c 2f  ternal tables}</
cb40: 74 63 6c 3e 0a 3c 68 34 3e 32 2e 35 2e 31 20 49  tcl>.<h4>2.5.1 I
cb50: 6e 74 65 72 6e 61 6c 20 53 63 68 65 6d 61 20 4f  nternal Schema O
cb60: 62 6a 65 63 74 73 3c 2f 68 34 3e 0a 0a 3c 70 3e  bjects</h4>..<p>
cb70: 5e 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20  ^In addition to 
cb80: 74 68 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 69  the tables, indi
cb90: 63 65 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 20  ces, views, and 
cba0: 74 72 69 67 67 65 72 73 20 63 72 65 61 74 65 64  triggers created
cbb0: 20 62 79 0a 74 68 65 20 61 70 70 6c 69 63 61 74   by.the applicat
cbc0: 69 6f 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20 64  ion and/or the d
cbd0: 65 76 65 6c 6f 70 65 72 20 75 73 69 6e 67 20 43  eveloper using C
cbe0: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  REATE statements
cbf0: 20 53 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74 65   SQL, the.sqlite
cc00: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6d 61  _master table ma
cc10: 79 20 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20 6f  y contain zero o
cc20: 72 20 6d 6f 72 65 20 65 6e 74 72 69 65 73 20 66  r more entries f
cc30: 6f 72 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c 20  or .<i>internal 
cc40: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c 2f  schema objects</
cc50: 69 3e 20 74 68 61 74 20 61 72 65 20 63 72 65 61  i> that are crea
cc60: 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 66 6f  ted by SQLite fo
cc70: 72 20 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65 72  r its .own inter
cc80: 6e 61 6c 20 75 73 65 2e 20 20 5e 54 68 65 20 6e  nal use.  ^The n
cc90: 61 6d 65 73 20 6f 66 20 69 6e 74 65 72 6e 61 6c  ames of internal
cca0: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 0a   schema objects.
ccb0: 61 6c 77 61 79 73 20 62 65 67 69 6e 20 77 69 74  always begin wit
ccc0: 68 20 22 73 71 6c 69 74 65 5f 22 20 61 6e 64 20  h "sqlite_" and 
ccd0: 61 6e 79 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  any table, index
cce0: 2c 20 76 69 65 77 2c 20 6f 72 20 74 72 69 67 67  , view, or trigg
ccf0: 65 72 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62 65  er.whose name be
cd00: 67 69 6e 73 20 77 69 74 68 20 22 73 71 6c 69 74  gins with "sqlit
cd10: 65 5f 22 20 69 73 20 61 6e 20 69 6e 74 65 72 6e  e_" is an intern
cd20: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
cd30: 2e 0a 5e 53 51 4c 69 74 65 20 70 72 6f 68 69 62  ..^SQLite prohib
cd40: 69 74 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  its applications
cd50: 20 66 72 6f 6d 20 63 72 65 61 74 69 6e 67 20 6f   from creating o
cd60: 62 6a 65 63 74 73 20 77 68 6f 73 65 20 6e 61 6d  bjects whose nam
cd70: 65 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 73  es begin.with "s
cd80: 71 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e 49  qlite_".  ..<p>I
cd90: 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f  nternal schema o
cda0: 62 6a 65 63 74 73 20 75 73 65 64 20 62 79 20 53  bjects used by S
cdb0: 51 4c 69 74 65 20 6d 61 79 20 69 6e 63 6c 75 64  QLite may includ
cdc0: 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a  e the following:
cdd0: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e  ..<ul>.<li><p>In
cde0: 64 69 63 65 73 20 77 69 74 68 20 6e 61 6d 65 73  dices with names
cdf0: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71   of the form "sq
ce00: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54  lite_autoindex_T
ce10: 41 42 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20 20  ABLE_N" that.   
ce20: 20 20 20 20 61 72 65 20 75 73 65 64 20 74 6f 20      are used to 
ce30: 69 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51 55  implement [UNIQU
ce40: 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20  E] and [PRIMARY 
ce50: 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73  KEY] constraints
ce60: 20 6f 6e 0a 20 20 20 20 20 20 20 6f 72 64 69 6e   on.       ordin
ce70: 61 72 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c 69  ary tables...<li
ce80: 3e 3c 70 3e 41 20 74 61 62 6c 65 20 77 69 74 68  ><p>A table with
ce90: 20 74 68 65 20 6e 61 6d 65 20 22 73 71 6c 69 74   the name "sqlit
cea0: 65 5f 73 65 71 75 65 6e 63 65 22 20 74 68 61 74  e_sequence" that
ceb0: 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70   is used to keep
cec0: 20 74 72 61 63 6b 0a 20 20 20 20 20 20 20 6f 66   track.       of
ced0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 69 73   the maximum his
cee0: 74 6f 72 69 63 61 6c 20 5b 49 4e 54 45 47 45 52  torical [INTEGER
cef0: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 6f   PRIMARY KEY] fo
cf00: 72 20 61 20 74 61 62 6c 65 20 74 68 61 74 0a 20  r a table that. 
cf10: 20 20 20 20 20 20 75 73 69 6e 67 20 5b 41 55 54        using [AUT
cf20: 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c  OINCREMENT]...<l
cf30: 69 3e 3c 70 3e 54 61 62 6c 65 73 20 77 69 74 68  i><p>Tables with
cf40: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f   names of the fo
cf50: 72 6d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 4e  rm "sqlite_statN
cf60: 22 20 77 68 65 72 65 20 4e 20 69 73 20 61 6e 20  " where N is an 
cf70: 69 6e 74 65 67 65 72 2e 0a 20 20 20 20 20 20 20  integer..       
cf80: 53 75 63 68 20 74 61 62 6c 65 73 20 73 74 6f 72  Such tables stor
cf90: 65 20 64 61 74 61 62 61 73 65 20 73 74 61 74 69  e database stati
cfa0: 73 74 69 63 73 20 67 61 74 68 65 72 65 64 20 62  stics gathered b
cfb0: 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a  y the [ANALYZE].
cfc0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 61         command a
cfd0: 6e 64 20 75 73 65 64 20 62 79 20 74 68 65 20 71  nd used by the q
cfe0: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
cff0: 68 65 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 74  help determine t
d000: 68 65 20 62 65 73 74 0a 20 20 20 20 20 20 20 61  he best.       a
d010: 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
d020: 66 6f 72 20 65 61 63 68 20 71 75 65 72 79 2e 0a  for each query..
d030: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 41 64 64 69 74 69  </ul>..<p>Additi
d040: 6f 6e 61 6c 20 69 6e 74 65 72 6e 61 6c 20 73 63  onal internal sc
d050: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 6e 61 6d  hema objects nam
d060: 65 73 2c 20 61 6c 77 61 79 73 20 62 65 67 69 6e  es, always begin
d070: 6e 69 6e 67 20 77 69 74 68 20 22 73 71 6c 69 74  ning with "sqlit
d080: 65 5f 22 2c 0a 6d 61 79 20 62 65 20 61 64 64 65  e_",.may be adde
d090: 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20  d to the SQLite 
d0a0: 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e 20 66  file format in f
d0b0: 75 74 75 72 65 20 72 65 6c 65 61 73 65 73 2e 0a  uture releases..
d0c0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
d0d0: 74 20 73 65 71 74 61 62 20 7b 73 71 6c 69 74 65  t seqtab {sqlite
d0e0: 5f 73 65 71 75 65 6e 63 65 7d 3c 2f 74 63 6c 3e  _sequence}</tcl>
d0f0: 0a 3c 68 34 3e 32 2e 35 2e 32 20 54 68 65 20 73  .<h4>2.5.2 The s
d100: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
d110: 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  able</h4>..<p>^T
d120: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
d130: 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e 20 69  ce table is an i
d140: 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 75 73  nternal table us
d150: 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
d160: 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52 45 4d  ment.[AUTOINCREM
d170: 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71 6c 69  ENT].  ^The sqli
d180: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
d190: 65 20 69 73 20 63 72 65 61 74 65 64 20 61 75 74  e is created aut
d1a0: 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65 6e 65  omatically.whene
d1b0: 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61 72 79  ver any ordinary
d1c0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 41   table with an A
d1d0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69 6e 74  UTOINCREMENT int
d1e0: 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79  eger primary.key
d1f0: 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 5e 4f   is created.  ^O
d200: 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74 68 65  nce created, the
d210: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
d220: 20 74 61 62 6c 65 20 65 78 69 73 74 73 20 69 6e   table exists in
d230: 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74   the.sqlite_mast
d240: 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76 65 72  er table forever
d250: 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64  ; it cannot be d
d260: 72 6f 70 70 65 64 2e 0a 54 68 65 20 73 63 68 65  ropped..The sche
d270: 6d 61 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  ma for the sqlit
d280: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
d290: 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74   is:..<blockquot
d2a0: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
d2b0: 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 65 71 75  ABLE sqlite_sequ
d2c0: 65 6e 63 65 28 6e 61 6d 65 2c 73 65 71 29 3b 0a  ence(name,seq);.
d2d0: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
d2e0: 74 65 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 69  te>..<p>^There i
d2f0: 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69  s a single row i
d300: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  n the sqlite_seq
d310: 75 65 6e 63 65 20 74 61 62 6c 65 20 66 6f 72 20  uence table for 
d320: 65 61 63 68 20 6f 72 64 69 6e 61 72 79 0a 74 61  each ordinary.ta
d330: 62 6c 65 20 74 68 61 74 20 75 73 65 73 20 41 55  ble that uses AU
d340: 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 54 68  TOINCREMENT.  Th
d350: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
d360: 62 6c 65 20 28 61 73 20 69 74 20 61 70 70 65 61  ble (as it appea
d370: 72 73 20 69 6e 0a 73 71 6c 69 74 65 5f 6d 61 73  rs in.sqlite_mas
d380: 74 65 72 2e 6e 61 6d 65 29 20 69 73 20 69 6e 20  ter.name) is in 
d390: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
d3a0: 6e 63 65 2e 6d 61 69 6e 20 66 69 65 6c 64 20 61  nce.main field a
d3b0: 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 0a 5b  nd the largest.[
d3c0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
d3d0: 4b 45 59 5d 20 65 76 65 72 20 75 73 65 64 20 62  KEY] ever used b
d3e0: 79 20 74 68 61 74 20 74 61 62 6c 65 20 69 73 20  y that table is 
d3f0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  in the sqlite_se
d400: 71 75 65 6e 63 65 2e 73 65 71 0a 66 69 65 6c 64  quence.seq.field
d410: 2e 20 20 5e 4e 65 77 20 61 75 74 6f 6d 61 74 69  .  ^New automati
d420: 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20  cally generated 
d430: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
d440: 6b 65 79 73 20 66 6f 72 20 41 55 54 4f 49 4e 43  keys for AUTOINC
d450: 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20 61 72  REMENT.tables ar
d460: 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
d470: 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  be larger than t
d480: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
d490: 63 65 2e 73 65 71 20 66 69 65 6c 64 20 66 6f 72  ce.seq field for
d4a0: 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 28 49  .that table..^(I
d4b0: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  f the sqlite_seq
d4c0: 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20  uence.seq field 
d4d0: 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  of an AUTOINCREM
d4e0: 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61 6c 72  ENT table is alr
d4f0: 65 61 64 79 20 61 74 0a 74 68 65 20 6c 61 72 67  eady at.the larg
d500: 65 73 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  est integer valu
d510: 65 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  e (9223372036854
d520: 37 37 35 38 30 37 29 20 74 68 65 6e 20 61 74 74  775807) then att
d530: 65 6d 70 74 73 20 74 6f 20 61 64 64 20 6e 65 77  empts to add new
d540: 0a 72 6f 77 73 20 74 6f 20 74 68 61 74 20 74 61  .rows to that ta
d550: 62 6c 65 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ble with an auto
d560: 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  matically genera
d570: 74 65 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d  ted integer prim
d580: 61 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a 77 69  ary will fail.wi
d590: 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f 46 55  th an [SQLITE_FU
d5a0: 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e 54 68  LL] error.)^.^Th
d5b0: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
d5c0: 65 2e 73 65 71 20 66 69 65 6c 64 20 69 73 20 61  e.seq field is a
d5d0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
d5e0: 61 74 65 64 20 69 66 20 72 65 71 75 69 72 65 64  ated if required
d5f0: 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72 69 65   when.new entrie
d600: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  s are added to a
d610: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
d620: 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65 20 73 71  table.  .^The sq
d630: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
d640: 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43  w for an AUTOINC
d650: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20  REMENT table is 
d660: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
d670: 6c 65 74 65 64 0a 77 68 65 6e 20 74 68 65 20 74  leted.when the t
d680: 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e  able is dropped.
d690: 0a 5e 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  .^If the sqlite_
d6a0: 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72  sequence row for
d6b0: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
d6c0: 54 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  T table does not
d6d0: 20 65 78 69 73 74 20 77 68 65 6e 0a 74 68 65 20   exist when.the 
d6e0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
d6f0: 62 6c 65 20 69 73 20 75 70 64 61 74 65 64 2c 20  ble is updated, 
d700: 74 68 65 6e 20 61 20 6e 65 77 20 73 71 6c 69 74  then a new sqlit
d710: 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 69  e_sequence row i
d720: 73 20 63 72 65 61 74 65 64 2e 0a 5e 28 49 66 20  s created..^(If 
d730: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
d740: 6e 63 65 2e 73 65 71 20 76 61 6c 75 65 20 66 6f  nce.seq value fo
d750: 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  r an AUTOINCREME
d760: 4e 54 20 74 61 62 6c 65 20 69 73 20 6d 61 6e 75  NT table is manu
d770: 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20 73 6f 6d  ally .set to som
d780: 65 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ething other tha
d790: 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  n an integer and
d7a0: 20 74 68 65 72 65 20 69 73 20 61 20 73 75 62 73   there is a subs
d7b0: 65 71 75 65 6e 74 20 61 74 74 65 6d 70 74 20 74  equent attempt t
d7c0: 6f 0a 69 6e 73 65 72 74 20 74 68 65 20 6f 72 20  o.insert the or 
d7d0: 75 70 64 61 74 65 20 74 68 65 20 41 55 54 4f 49  update the AUTOI
d7e0: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2c 20  NCREMENT table, 
d7f0: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
d800: 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 29  r is undefined.)
d810: 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63 61 74 69  ^..<p>^Applicati
d820: 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77  on code is allow
d830: 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ed to modify the
d840: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
d850: 20 74 61 62 6c 65 2c 20 74 6f 20 61 64 64 0a 6e   table, to add.n
d860: 65 77 20 72 6f 77 73 2c 20 74 6f 20 64 65 6c 65  ew rows, to dele
d870: 74 65 20 72 6f 77 73 2c 20 6f 72 20 74 6f 20 6d  te rows, or to m
d880: 6f 64 69 66 79 20 65 78 69 73 74 69 6e 67 20 72  odify existing r
d890: 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  ows.  ^However, 
d8a0: 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 6f 64 65  application.code
d8b0: 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 74   cannot create t
d8c0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
d8d0: 63 65 20 74 61 62 6c 65 20 69 66 20 69 74 20 64  ce table if it d
d8e0: 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  oes not already 
d8f0: 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69 63 61 74  exist..^Applicat
d900: 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20 64 65 6c  ion code can del
d910: 65 74 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  ete all entries 
d920: 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f  from the sqlite_
d930: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2c 0a  sequence table,.
d940: 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  but application 
d950: 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64 72 6f 70  code cannot drop
d960: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
d970: 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a 3c 74 63  ence table...<tc
d980: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74  l>hd_fragment st
d990: 61 74 31 74 61 62 20 7b 73 71 6c 69 74 65 5f 73  at1tab {sqlite_s
d9a0: 74 61 74 31 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  tat1}</tcl>.<h4>
d9b0: 32 2e 35 2e 33 20 54 68 65 20 73 71 6c 69 74 65  2.5.3 The sqlite
d9c0: 5f 73 74 61 74 31 20 74 61 62 6c 65 3c 2f 68 34  _stat1 table</h4
d9d0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74  >..<p>^The sqlit
d9e0: 65 5f 73 74 61 74 31 20 69 73 20 61 6e 20 69 6e  e_stat1 is an in
d9f0: 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 63 72 65  ternal table cre
da00: 61 74 65 64 20 62 79 20 74 68 65 20 5b 41 4e 41  ated by the [ANA
da10: 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e  LYZE] command.an
da20: 64 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 73  d used to hold s
da30: 75 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f  upplemental info
da40: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 61  rmation about ta
da50: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
da60: 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79 20   that the.query 
da70: 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20  planner can use 
da80: 74 6f 20 68 65 6c 70 20 69 74 20 66 69 6e 64 20  to help it find 
da90: 62 65 74 74 65 72 20 77 61 79 73 20 6f 66 20 70  better ways of p
daa0: 65 72 66 6f 72 6d 69 6e 67 20 71 75 65 72 69 65  erforming querie
dab0: 73 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73  s..^Applications
dac0: 20 63 61 6e 20 75 70 64 61 74 65 2c 20 64 65 6c   can update, del
dad0: 65 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74  ete from, insert
dae0: 20 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74 68   into or drop th
daf0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 0a 74  e sqlite_stat1.t
db00: 61 62 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f  able, but may no
db10: 74 20 63 72 65 61 74 65 20 6f 72 20 61 6c 74 65  t create or alte
db20: 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  r the sqlite_sta
db30: 74 31 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73  t1 table..^The s
db40: 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
db50: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
db60: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
db70: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
db80: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
db90: 71 6c 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c  qlite_stat1(tbl,
dba0: 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65  idx,stat);.</pre
dbb0: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
dbc0: 3c 70 3e 54 68 65 72 65 20 69 73 20 6e 6f 72 6d  <p>There is norm
dbd0: 61 6c 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65 72  ally one row per
dbe0: 20 69 6e 64 65 78 2c 20 77 69 74 68 20 74 68 65   index, with the
dbf0: 20 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65   index identifie
dc00: 64 20 62 79 20 74 68 65 0a 6e 61 6d 65 20 69 6e  d by the.name in
dc10: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
dc20: 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 2e 20 20 54  1.idx column.  T
dc30: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
dc40: 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a 74 68  tbl column is.th
dc50: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
dc60: 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
dc70: 20 69 6e 64 65 78 20 62 65 6c 6f 6e 67 73 2e 20   index belongs. 
dc80: 20 49 6e 20 65 61 63 68 20 73 75 63 68 20 72 6f   In each such ro
dc90: 77 2c 20 0a 74 68 65 20 73 71 6c 69 74 65 5f 73  w, .the sqlite_s
dca0: 74 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20  tat.stat column 
dcb0: 77 69 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e 67  will be.a string
dcc0: 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 61   consisting of a
dcd0: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72   list of integer
dce0: 73 2e 20 20 54 68 65 20 66 69 72 73 74 20 69 6e  s.  The first in
dcf0: 74 65 67 65 72 20 69 6e 20 74 68 69 73 0a 6c 69  teger in this.li
dd00: 73 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  st is the number
dd10: 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
dd20: 69 6e 64 65 78 20 61 6e 64 20 69 6e 20 74 68 65  index and in the
dd30: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 73 65 63   table.  The sec
dd40: 6f 6e 64 0a 69 6e 74 65 67 65 72 20 69 73 20 74  ond.integer is t
dd50: 68 65 20 61 76 65 72 61 67 65 20 6e 75 6d 62 65  he average numbe
dd60: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
dd70: 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76 65   index that have
dd80: 20 74 68 65 20 73 61 6d 65 0a 76 61 6c 75 65 20   the same.value 
dd90: 69 6e 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c  in the first col
dda0: 75 6d 6e 20 6f 66 20 74 68 65 20 69 6e 64 65 78  umn of the index
ddb0: 2e 20 20 54 68 65 20 74 68 69 72 64 20 69 6e 74  .  The third int
ddc0: 65 67 65 72 20 69 73 20 74 68 65 20 61 76 65 72  eger is the aver
ddd0: 61 67 65 0a 6e 75 6d 62 65 72 20 6f 66 20 72 6f  age.number of ro
dde0: 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
ddf0: 74 68 61 74 20 68 61 76 65 20 74 68 65 20 73 61  that have the sa
de00: 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  me value for the
de10: 20 66 69 72 73 74 20 74 77 6f 0a 63 6f 6c 75 6d   first two.colum
de20: 6e 73 2e 20 20 54 68 65 20 4e 2d 74 68 20 69 6e  ns.  The N-th in
de30: 74 65 67 65 72 20 28 66 6f 72 20 4e 3e 31 29 20  teger (for N>1) 
de40: 69 73 20 74 68 65 20 61 76 65 72 61 67 65 20 6e  is the average n
de50: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
de60: 20 0a 74 68 65 20 69 6e 64 65 78 20 77 68 69 63   .the index whic
de70: 68 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  h have the same 
de80: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69  value for the fi
de90: 72 73 74 20 4e 2d 31 20 63 6f 6c 75 6d 6e 73 2e  rst N-1 columns.
dea0: 20 20 46 6f 72 0a 61 20 4b 2d 63 6f 6c 75 6d 6e    For.a K-column
deb0: 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20 77 69   index, there wi
dec0: 6c 6c 20 62 65 20 4b 2b 31 20 69 6e 74 65 67 65  ll be K+1 intege
ded0: 72 73 20 69 6e 20 74 68 65 20 73 74 61 74 20 63  rs in the stat c
dee0: 6f 6c 75 6d 6e 2e 20 20 49 66 0a 74 68 65 20 69  olumn.  If.the i
def0: 6e 64 65 78 20 69 73 20 75 6e 69 71 75 65 2c 20  ndex is unique, 
df00: 74 68 65 6e 20 74 68 65 20 6c 61 73 74 20 69 6e  then the last in
df10: 74 65 67 65 72 20 77 69 6c 6c 20 62 65 20 31 2e  teger will be 1.
df20: 0a 0a 3c 70 3e 54 68 65 20 6c 69 73 74 20 6f 66  ..<p>The list of
df30: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65   integers in the
df40: 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 63 61 6e   stat column can
df50: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 66   optionally be f
df60: 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6b  ollowed.by the k
df70: 65 79 77 6f 72 64 20 22 75 6e 6f 72 64 65 72 65  eyword "unordere
df80: 64 22 2e 20 20 54 68 65 20 22 75 6e 6f 72 64 65  d".  The "unorde
df90: 72 65 64 22 20 6b 65 79 77 6f 72 64 2c 20 69 66  red" keyword, if
dfa0: 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 2c 0a   it is present,.
dfb0: 6d 75 73 74 20 62 65 20 73 65 70 61 72 61 74 65  must be separate
dfc0: 64 20 66 72 6f 6d 20 74 68 65 20 6c 61 73 74 20  d from the last 
dfd0: 69 6e 74 65 67 65 72 20 62 79 20 61 20 73 69 6e  integer by a sin
dfe0: 67 6c 65 20 73 70 61 63 65 2e 20 20 49 66 20 74  gle space.  If t
dff0: 68 65 0a 22 75 6e 6f 72 64 65 72 65 64 22 20 6b  he."unordered" k
e000: 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
e010: 74 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65 72  t, then the quer
e020: 79 20 70 6c 61 6e 6e 65 72 20 61 73 73 75 6d 65  y planner assume
e030: 73 20 74 68 61 74 0a 74 68 65 20 69 6e 64 65 78  s that.the index
e040: 20 69 73 20 75 6e 6f 72 64 65 72 65 64 20 61 6e   is unordered an
e050: 64 20 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74  d will not use t
e060: 68 65 20 69 6e 64 65 78 20 66 6f 72 20 61 20 72  he index for a r
e070: 61 6e 67 65 20 71 75 65 72 79 2e 0a 0a 3c 70 3e  ange query...<p>
e080: 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  If the sqlite_st
e090: 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 69  at1.idx column i
e0a0: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  s NULL, then the
e0b0: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 73 74   sqlite_stat1.st
e0c0: 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  at.column contai
e0d0: 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  ns a single inte
e0e0: 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
e0f0: 20 28 65 73 74 69 6d 61 74 65 64 29 20 6e 75 6d   (estimated) num
e100: 62 65 72 20 6f 66 0a 72 6f 77 73 20 69 6e 20 74  ber of.rows in t
e110: 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66  he table identif
e120: 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73 74  ied by sqlite_st
e130: 61 74 31 2e 74 62 6c 2e 0a 0a 3c 74 63 6c 3e 68  at1.tbl...<tcl>h
e140: 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 32  d_fragment stat2
e150: 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74  tab {sqlite_stat
e160: 32 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 35  2}</tcl>.<h4>2.5
e170: 2e 34 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .4 The sqlite_st
e180: 61 74 32 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a  at2 table</h4>..
e190: 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
e1a0: 61 74 32 20 69 73 20 6f 6e 6c 79 20 63 72 65 61  at2 is only crea
e1b0: 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20  ted and is only 
e1c0: 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  used if SQLite i
e1d0: 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20  s compiled.with 
e1e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
e1f0: 41 54 32 20 61 6e 64 20 69 66 20 74 68 65 20 53  AT2 and if the S
e200: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
e210: 6d 62 65 72 20 69 73 20 62 65 74 77 65 65 6e 0a  mber is between.
e220: 33 2e 36 2e 31 38 20 61 6e 64 20 33 2e 37 2e 38  3.6.18 and 3.7.8
e230: 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .  The sqlite_st
e240: 61 74 32 20 74 61 62 6c 65 20 69 73 20 6e 65 69  at2 table is nei
e250: 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72  ther read nor wr
e260: 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72  itten by any.ver
e270: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62  sion of SQLite b
e280: 65 66 6f 72 65 20 33 2e 36 2e 31 38 20 6e 6f 72  efore 3.6.18 nor
e290: 20 61 66 74 65 72 20 33 2e 37 2e 38 2e 0a 54 68   after 3.7.8..Th
e2a0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
e2b0: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64  able contains ad
e2c0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
e2d0: 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64  tion.about the d
e2e0: 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b  istribution of k
e2f0: 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e  eys within an in
e300: 64 65 78 2e 0a 54 68 65 20 73 63 68 65 6d 61 20  dex..The schema 
e310: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
e320: 61 74 32 20 74 61 62 6c 65 20 69 73 20 61 73 20  at2 table is as 
e330: 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b  follows:..<block
e340: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
e350: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
e360: 73 74 61 74 32 28 74 62 6c 2c 69 64 78 2c 73 61  stat2(tbl,idx,sa
e370: 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65 29 3b 0a  mpleno,sample);.
e380: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
e390: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  te>..<p>The sqli
e3a0: 74 65 5f 73 74 61 74 32 2e 69 64 78 20 63 6f 6c  te_stat2.idx col
e3b0: 75 6d 6e 20 61 6e 64 20 74 68 65 20 73 71 6c 69  umn and the sqli
e3c0: 74 65 5f 73 74 61 74 32 2e 74 62 6c 20 63 6f 6c  te_stat2.tbl col
e3d0: 75 6d 6e 20 69 6e 20 65 61 63 68 20 0a 72 6f 77  umn in each .row
e3e0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
e3f0: 74 61 74 32 20 74 61 62 6c 65 20 69 64 65 6e 74  tat2 table ident
e400: 69 66 79 20 61 6e 20 69 6e 64 65 78 20 64 65 73  ify an index des
e410: 63 72 69 62 65 64 20 62 79 20 74 68 61 74 20 72  cribed by that r
e420: 6f 77 2e 0a 54 68 65 72 65 20 61 72 65 20 75 73  ow..There are us
e430: 75 61 6c 6c 79 20 31 30 20 72 6f 77 73 20 69 6e  ually 10 rows in
e440: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
e450: 32 0a 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68  2.table for each
e460: 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68 65 20   index...<p>The 
e470: 73 71 6c 69 74 65 5f 73 74 61 74 32 20 65 6e 74  sqlite_stat2 ent
e480: 72 69 65 73 20 66 6f 72 20 61 6e 20 69 6e 64 65  ries for an inde
e490: 78 20 74 68 61 74 20 68 61 76 65 20 73 71 6c 69  x that have sqli
e4a0: 74 65 5f 73 74 61 74 32 2e 73 61 6d 70 6c 65 6e  te_stat2.samplen
e4b0: 6f 0a 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  o.between 0 and 
e4c0: 39 20 69 6e 63 6c 75 73 69 76 65 20 61 72 65 20  9 inclusive are 
e4d0: 73 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  samples of the l
e4e0: 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 76 61 6c  eft-most key val
e4f0: 75 65 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20  ue in the.index 
e500: 74 61 6b 65 6e 20 61 74 20 65 76 65 6e 6c 79 20  taken at evenly 
e510: 73 70 61 63 65 64 20 70 6f 69 6e 74 73 20 61 6c  spaced points al
e520: 6f 6e 67 20 74 68 65 20 69 6e 64 65 78 2e 0a 4c  ong the index..L
e530: 65 74 20 43 20 62 65 20 74 68 65 20 6e 75 6d 62  et C be the numb
e540: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
e550: 65 20 69 6e 64 65 78 2e 0a 54 68 65 6e 20 74 68  e index..Then th
e560: 65 20 73 61 6d 70 6c 65 64 20 72 6f 77 73 20 61  e sampled rows a
e570: 72 65 20 67 69 76 65 6e 20 62 79 0a 0a 3c 62 6c  re given by..<bl
e580: 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 20 72  ockquote>.     r
e590: 6f 77 6e 75 6d 62 65 72 20 3d 20 28 69 2a 43 2a  ownumber = (i*C*
e5a0: 32 20 2b 20 43 29 2f 32 30 0a 3c 2f 62 6c 6f 63  2 + C)/20.</bloc
e5b0: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
e5c0: 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20 74 68  variable i in th
e5d0: 65 20 70 72 65 76 69 6f 75 73 20 65 78 70 72 65  e previous expre
e5e0: 73 73 69 6f 6e 20 76 61 72 69 65 73 20 62 65 74  ssion varies bet
e5f0: 77 65 65 6e 20 30 20 61 6e 64 20 39 2e 0a 43 6f  ween 0 and 9..Co
e600: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65 20  nceptually, the 
e610: 69 6e 64 65 78 20 73 70 61 63 65 20 69 73 20 64  index space is d
e620: 69 76 69 64 65 64 20 69 6e 74 6f 0a 31 30 20 75  ivided into.10 u
e630: 6e 69 66 6f 72 6d 20 62 75 63 6b 65 74 73 20 61  niform buckets a
e640: 6e 64 20 74 68 65 20 73 61 6d 70 6c 65 73 20 61  nd the samples a
e650: 72 65 20 74 68 65 20 6d 69 64 64 6c 65 20 72 6f  re the middle ro
e660: 77 20 66 72 6f 6d 20 65 61 63 68 20 62 75 63 6b  w from each buck
e670: 65 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d  et...<p>The form
e680: 61 74 20 66 6f 72 20 73 71 6c 69 74 65 5f 73 74  at for sqlite_st
e690: 61 74 32 20 69 73 20 72 65 63 6f 72 64 65 64 20  at2 is recorded 
e6a0: 68 65 72 65 20 66 6f 72 20 6c 65 67 61 63 79 20  here for legacy 
e6b0: 72 65 66 65 72 65 6e 63 65 2e 20 20 0a 52 65 63  reference.  .Rec
e6c0: 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent versions of 
e6d0: 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67 65 72  SQLite no longer
e6e0: 20 73 75 70 70 6f 72 74 20 73 71 6c 69 74 65 5f   support sqlite_
e6f0: 73 74 61 74 32 20 61 6e 64 20 74 68 65 0a 73 71  stat2 and the.sq
e700: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
e710: 2c 20 69 74 20 69 73 20 65 78 69 73 74 73 2c 20  , it is exists, 
e720: 69 73 20 73 69 6d 70 6c 79 20 69 67 6e 6f 72 65  is simply ignore
e730: 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  d...<tcl>hd_frag
e740: 6d 65 6e 74 20 73 74 61 74 33 74 61 62 20 7b 73  ment stat3tab {s
e750: 71 6c 69 74 65 5f 73 74 61 74 33 7d 3c 2f 74 63  qlite_stat3}</tc
e760: 6c 3e 0a 3c 68 34 3e 32 2e 35 2e 35 20 54 68 65  l>.<h4>2.5.5 The
e770: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
e780: 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  ble</h4>..<p>The
e790: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 69 73   sqlite_stat3 is
e7a0: 20 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e   only created an
e7b0: 64 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  d is only used i
e7c0: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
e7d0: 69 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54  iled.with [SQLIT
e7e0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20  E_ENABLE_STAT3] 
e7f0: 61 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74  and if the SQLit
e800: 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
e810: 20 69 73 0a 33 2e 37 2e 39 20 6f 72 20 67 72 65   is.3.7.9 or gre
e820: 61 74 65 72 2e 20 20 54 68 65 20 73 71 6c 69 74  ater.  The sqlit
e830: 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
e840: 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f   neither read no
e850: 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79  r written by any
e860: 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69  .version of SQLi
e870: 74 65 20 62 65 66 6f 72 65 20 33 2e 36 2e 39 2e  te before 3.6.9.
e880: 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
e890: 33 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  3 table contains
e8a0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e8b0: 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68  rmation.about th
e8c0: 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f  e distribution o
e8d0: 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e  f keys within an
e8e0: 20 69 6e 64 65 78 2c 20 69 6e 66 6f 72 6d 61 74   index, informat
e8f0: 69 6f 6e 20 74 68 61 74 20 74 68 65 0a 71 75 65  ion that the.que
e900: 72 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75  ry planner can u
e910: 73 65 20 74 6f 20 64 65 76 69 73 65 20 62 65 74  se to devise bet
e920: 74 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 71  ter and faster q
e930: 75 65 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e  uery algorithms.
e940: 0a 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74  .The schema of t
e950: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
e960: 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c  table is as foll
e970: 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ows:..<blockquot
e980: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
e990: 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74  ABLE sqlite_stat
e9a0: 33 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c  3(tbl,idx,nEq,nL
e9b0: 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a  t,nDLt,sample);.
e9c0: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
e9d0: 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  te>..<p>There ar
e9e0: 65 20 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69 70  e usually multip
e9f0: 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  le entries in th
ea00: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
ea10: 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e  able for each in
ea20: 64 65 78 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  dex..The sqlite_
ea30: 73 74 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c  stat3.sample col
ea40: 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61  umn holds the va
ea50: 6c 75 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  lue of the left-
ea60: 6d 6f 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e  most field of an
ea70: 0a 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65  .index identifie
ea80: 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 5f  d by the sqlite_
ea90: 73 74 61 74 33 2e 69 64 78 20 61 6e 64 20 74 68  stat3.idx and th
eaa0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 74  e sqlite_stat3.t
eab0: 62 6c 20 63 6f 6c 75 6d 6e 73 2e 0a 49 66 20 74  bl columns..If t
eac0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  he sqlite_stat3.
ead0: 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65 5f 73  idx and sqlite_s
eae0: 74 61 74 33 2e 74 62 6c 0a 63 6f 6c 75 6d 6e 73  tat3.tbl.columns
eaf0: 20 68 6f 6c 64 20 74 68 65 20 73 61 6d 65 20 76   hold the same v
eb00: 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61 74 20  alue, then that 
eb10: 72 6f 77 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  row contains a s
eb20: 61 6d 70 6c 65 20 66 72 6f 6d 0a 74 68 65 20 5b  ample from.the [
eb30: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
eb40: 4b 45 59 5d 20 6f 66 20 74 68 65 20 74 61 62 6c  KEY] of the tabl
eb50: 65 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  e..The sqlite_st
eb60: 61 74 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68  at3.nEq column h
eb70: 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69  olds the approxi
eb80: 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65  mate.number of e
eb90: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
eba0: 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d  dex whose left-m
ebb0: 6f 73 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74  ost column exact
ebc0: 6c 79 20 6d 61 74 63 68 65 73 0a 74 68 65 20 73  ly matches.the s
ebd0: 61 6d 70 6c 65 2e 20 20 0a 54 68 65 20 73 71 6c  ample.  .The sql
ebe0: 69 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f  ite_stat3.nLt ho
ebf0: 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d  lds the approxim
ec00: 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  ate number of en
ec10: 74 72 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64  tries in the.ind
ec20: 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f  ex whose left-mo
ec30: 73 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73  st column is les
ec40: 73 20 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c  s than the sampl
ec50: 65 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  e..The sqlite_st
ec60: 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20  at3.nDLt column 
ec70: 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78  holds the approx
ec80: 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20  imate.number of 
ec90: 64 69 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f  distinct left-mo
eca0: 73 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  st entries in th
ecb0: 65 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  e index that are
ecc0: 20 6c 65 73 73 20 74 68 61 6e 0a 74 68 65 20 73   less than.the s
ecd0: 61 6d 70 6c 65 2e 0a 0a 3c 70 3e 46 75 74 75 72  ample...<p>Futur
ece0: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  e versions of SQ
ecf0: 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67  Lite might chang
ed00: 65 20 74 6f 20 73 74 6f 72 65 20 61 20 73 74 72  e to store a str
ed10: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6d  ing containing.m
ed20: 75 6c 74 69 70 6c 65 20 69 6e 74 65 67 65 72 73  ultiple integers
ed30: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 73   values in the s
ed40: 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 44 4c 74  qlite_stat3.nDLt
ed50: 20 63 6f 6c 75 6d 6e 2c 20 61 20 73 74 72 69 6e   column, a strin
ed60: 67 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 66  g in which.the f
ed70: 69 72 73 74 20 69 6e 74 65 67 65 72 20 77 69 6c  irst integer wil
ed80: 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20  l be the number 
ed90: 6f 66 20 70 72 69 6f 72 20 69 6e 64 65 78 20 65  of prior index e
eda0: 6e 74 72 69 65 73 20 74 68 61 74 20 61 72 65 0a  ntries that are.
edb0: 64 69 73 74 69 6e 63 74 20 69 6e 20 74 68 65 20  distinct in the 
edc0: 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
edd0: 2c 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 74  , the second int
ede0: 65 67 65 72 20 69 73 20 74 68 65 20 6e 75 6d 62  eger is the numb
edf0: 65 72 20 6f 66 0a 70 72 69 6f 72 20 69 6e 64 65  er of.prior inde
ee00: 78 20 65 6e 74 72 69 65 73 20 74 68 61 74 20 61  x entries that a
ee10: 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20 74  re distinct in t
ee20: 68 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f 6c  he first two col
ee30: 75 6d 6e 73 2c 20 74 68 65 0a 74 68 69 72 64 20  umns, the.third 
ee40: 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 6e  integer is the n
ee50: 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 69  umber of prior i
ee60: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 74 68 61  ndex entries tha
ee70: 74 20 61 72 65 20 64 69 73 74 69 6e 63 74 0a 69  t are distinct.i
ee80: 6e 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  n the first thre
ee90: 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 73  e columns, and s
eea0: 6f 20 66 6f 72 74 68 20 20 57 69 74 68 20 73 75  o forth  With su
eeb0: 63 68 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 2c  ch an extension,
eec0: 20 74 68 65 0a 6e 44 4c 74 20 66 69 65 6c 64 20   the.nDLt field 
eed0: 77 69 6c 6c 20 62 65 63 6f 6d 65 20 73 69 6d 69  will become simi
eee0: 6c 61 72 20 69 6e 20 66 75 6e 63 74 69 6f 6e 20  lar in function 
eef0: 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  to the sqlite_st
ef00: 61 74 31 2e 73 74 61 74 20 66 69 65 6c 64 2e 0a  at1.stat field..
ef10: 0a 3c 70 3e 54 68 65 72 65 20 63 61 6e 20 62 65  .<p>There can be
ef20: 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75   an arbitrary nu
ef30: 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73  mber of sqlite_s
ef40: 74 61 74 33 20 65 6e 74 72 69 65 73 20 70 65 72  tat3 entries per
ef50: 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41   index..The [ANA
ef60: 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69  LYZE] command wi
ef70: 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e  ll typically gen
ef80: 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61  erate sqlite_sta
ef90: 74 33 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63  t3 tables.that c
efa0: 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31  ontain between 1
efb0: 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73  0 and 40 samples
efc0: 20 74 68 61 74 20 61 72 65 20 64 69 73 74 72 69   that are distri
efd0: 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65  buted across.the
efe0: 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64 20 77   key space and w
eff0: 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61  ith large nEq va
f000: 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  lues...<tcl>hd_f
f010: 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b  ragment rollback
f020: 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63  journal {rollbac
f030: 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74  k journal format
f040: 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e 30 20  }</tcl>.<h2>3.0 
f050: 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  The Rollback Jou
f060: 72 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  rnal</h2>..<p>Th
f070: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
f080: 61 6c 20 69 73 20 61 20 66 69 6c 65 20 61 73 73  al is a file ass
f090: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
f0a0: 68 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  h SQLite databas
f0b0: 65 0a 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64  e.file that hold
f0c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   information use
f0d0: 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65  d to restore the
f0e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
f0f0: 6f 20 69 74 73 20 69 6e 69 74 69 61 6c 0a 73 74  o its initial.st
f100: 61 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63  ate during the c
f110: 6f 75 72 73 65 20 6f 66 20 61 20 74 72 61 6e 73  ourse of a trans
f120: 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c  action..^The rol
f130: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
f140: 6c 65 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63  le is always loc
f150: 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  ated in the same
f160: 20 0a 64 69 72 65 63 74 6f 72 79 20 61 73 20 74   .directory as t
f170: 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  he database.file
f180: 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d   and has the sam
f190: 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61  e name as the da
f1a0: 74 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20  tabase file but 
f1b0: 77 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a  with the string.
f1c0: 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74  "<tt>-journal</t
f1d0: 74 3e 22 20 61 70 70 65 6e 64 65 64 2e 20 20 54  t>" appended.  T
f1e0: 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
f1f0: 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61   a single rollba
f200: 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63  ck journal.assoc
f210: 69 61 74 65 64 20 77 69 74 68 20 61 20 67 69 76  iated with a giv
f220: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68  e database and h
f230: 65 6e 63 65 20 74 68 65 72 65 20 63 61 6e 20 6f  ence there can o
f240: 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74 65  nly be one write
f250: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65  .transaction ope
f260: 6e 20 61 67 61 69 6e 73 74 20 61 20 73 69 6e 67  n against a sing
f270: 6c 65 20 64 61 74 61 62 61 73 65 20 61 74 20 6f  le database at o
f280: 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70  ne time.</p>..<p
f290: 3e 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f  >If a transactio
f2a0: 6e 20 69 73 20 61 62 6f 72 74 65 64 20 64 75 65  n is aborted due
f2b0: 20 74 6f 20 61 6e 20 61 70 70 6c 69 63 61 74 69   to an applicati
f2c0: 6f 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f 70 65  on crash, an ope
f2d0: 72 61 74 69 6e 67 0a 73 79 73 74 65 6d 20 63 72  rating.system cr
f2e0: 61 73 68 2c 20 6f 72 20 61 20 68 61 72 64 77 61  ash, or a hardwa
f2f0: 72 65 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65  re power failure
f300: 20 6f 72 20 63 72 61 73 68 2c 20 74 68 65 6e 20   or crash, then 
f310: 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 61 79  the database may
f320: 0a 62 65 20 6c 65 66 74 20 69 6e 20 61 6e 20 69  .be left in an i
f330: 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74  nconsistent stat
f340: 65 2e 20 20 5e 54 68 65 20 6e 65 78 74 20 74 69  e.  ^The next ti
f350: 6d 65 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  me SQLite attemp
f360: 74 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64  ts to open.the d
f370: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68  atabase file, th
f380: 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68  e presence of th
f390: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
f3a0: 61 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20  al file will be 
f3b0: 0a 64 65 74 65 63 74 65 64 20 61 6e 64 20 74 68  .detected and th
f3c0: 65 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62  e journal will b
f3d0: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
f3e0: 70 6c 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72  played back to r
f3f0: 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62  estore the.datab
f400: 61 73 65 20 74 6f 20 69 74 73 20 73 74 61 74 65  ase to its state
f410: 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
f420: 20 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20   the incomplete 
f430: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
f440: 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b  ..<p>^A rollback
f450: 20 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79   journal is only
f460: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
f470: 65 20 76 61 6c 69 64 20 69 66 20 69 74 20 65 78  e valid if it ex
f480: 69 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e  ists and.contain
f490: 73 20 61 20 76 61 6c 69 64 20 68 65 61 64 65 72  s a valid header
f4a0: 2e 20 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73  .  Hence a trans
f4b0: 61 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f  action can be co
f4c0: 6d 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f  mmitted in one.o
f4d0: 66 20 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f  f three ways:.<o
f4e0: 6c 3e 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c  l>.<li>^(The rol
f4f0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
f500: 6c 65 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65  le can be delete
f510: 64 29 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20 72  d)^,.<li>^(The r
f520: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
f530: 66 69 6c 65 20 63 61 6e 20 62 65 20 74 72 75 6e  file can be trun
f540: 63 61 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65  cated to zero le
f550: 6e 67 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e  ngth)^, or.<li>^
f560: 28 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 74  (The header of t
f570: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
f580: 6e 61 6c 20 63 61 6e 20 62 65 20 6f 76 65 72 77  nal can be overw
f590: 72 69 74 74 65 6e 20 77 69 74 68 0a 69 6e 76 61  ritten with.inva
f5a0: 6c 69 64 20 68 65 61 64 65 72 20 74 65 78 74 20  lid header text 
f5b0: 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c  (for example, al
f5c0: 6c 20 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c  l zeros).)^.</ol
f5d0: 3e 0a 5e 54 68 65 73 65 20 74 68 72 65 65 20 77  >.^These three w
f5e0: 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e  ays of committin
f5f0: 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  g a transaction 
f600: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  correspond to th
f610: 65 20 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41  e DELETE,.TRUNCA
f620: 54 45 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20  TE, and PERSIST 
f630: 73 65 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63  settings, respec
f640: 74 69 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b  tively, of the [
f650: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61  journal_mode pra
f660: 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e  gma]..</p>...<p>
f670: 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b  A valid rollback
f680: 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20   journal begins 
f690: 77 69 74 68 20 61 20 68 65 61 64 65 72 20 69 6e  with a header in
f6a0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   the following f
f6b0: 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  ormat:</p>..<cen
f6c0: 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b  ter>.<i>Rollback
f6d0: 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20   Journal Header 
f6e0: 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
f6f0: 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
f700: 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
f710: 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
f720: 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
f730: 6e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69  n.<tr>^(<td vali
f740: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
f750: 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61  ter>0.    <td va
f760: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
f770: 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e  enter>8.    <td>
f780: 48 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20 20  Header string:  
f790: 30 78 64 39 2c 20 30 78 64 35 2c 20 30 78 30 35  0xd9, 0xd5, 0x05
f7a0: 2c 20 30 78 66 39 2c 20 30 78 32 30 2c 20 30 78  , 0xf9, 0x20, 0x
f7b0: 61 31 2c 20 30 78 36 33 2c 20 30 78 64 37 29 5e  a1, 0x63, 0xd7)^
f7c0: 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67  .<tr>^(<td valig
f7d0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
f7e0: 65 72 3e 38 0a 20 20 20 20 3c 74 64 20 76 61 6c  er>8.    <td val
f7f0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
f800: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54  nter>4.    <td>T
f810: 68 65 20 22 50 61 67 65 20 43 6f 75 6e 74 22 20  he "Page Count" 
f820: 2d 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  - The number of 
f830: 70 61 67 65 73 20 69 6e 20 74 68 65 20 6e 65 78  pages in the nex
f840: 74 20 73 65 67 6d 65 6e 74 20 6f 66 20 74 68 65  t segment of the
f850: 20 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61   .        journa
f860: 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a 20 20 20 20  l, or -1 to.    
f870: 20 20 20 20 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e      mean all con
f880: 74 65 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20  tent to the end 
f890: 6f 66 20 74 68 65 20 66 69 6c 65 29 5e 0a 3c 74  of the file)^.<t
f8a0: 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>^(<td valign=t
f8b0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
f8c0: 31 32 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  12.    <td valig
f8d0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
f8e0: 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20 72  er>4.    <td>A r
f8f0: 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20  andom nonce for 
f900: 74 68 65 20 63 68 65 63 6b 73 75 6d 29 5e 0a 3c  the checksum)^.<
f910: 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d  tr>^(<td valign=
f920: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
f930: 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >16.    <td vali
f940: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
f950: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e  ter>4.    <td>In
f960: 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  itial size of th
f970: 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 70 61  e database in pa
f980: 67 65 73 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20  ges)^.<tr>^(<td 
f990: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
f9a0: 3d 63 65 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c  =center>20.    <
f9b0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
f9c0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
f9d0: 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 61 20 64   <td>Size of a d
f9e0: 69 73 6b 20 73 65 63 74 6f 72 20 61 73 73 75 6d  isk sector assum
f9f0: 65 64 20 62 79 20 74 68 65 20 70 72 6f 63 65 73  ed by the proces
fa00: 73 20 74 68 61 74 20 77 72 6f 74 65 20 74 68 69  s that wrote thi
fa10: 73 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61  s.        journa
fa20: 6c 2e 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76  l.)^.<tr>^(<td v
fa30: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
fa40: 63 65 6e 74 65 72 3e 32 34 0a 20 20 20 20 3c 74  center>24.    <t
fa50: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
fa60: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
fa70: 3c 74 64 3e 53 69 7a 65 20 6f 66 20 70 61 67 65  <td>Size of page
fa80: 73 20 69 6e 20 74 68 69 73 20 6a 6f 75 72 6e 61  s in this journa
fa90: 6c 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  l.)^.</table>.</
faa0: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20 72  center>..<p>^A r
fab0: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
fac0: 68 65 61 64 65 72 20 69 73 20 70 61 64 64 65 64  header is padded
fad0: 20 77 69 74 68 20 7a 65 72 6f 73 20 6f 75 74 20   with zeros out 
fae0: 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61  to the size of a
faf0: 20 0a 73 69 6e 67 6c 65 20 73 65 63 74 6f 72 20   .single sector 
fb00: 28 61 73 20 64 65 66 69 6e 65 64 20 62 79 20 74  (as defined by t
fb10: 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20 69  he sector size i
fb20: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
fb30: 20 32 30 29 2e 0a 54 68 65 20 68 65 61 64 65 72   20)..The header
fb40: 20 69 73 20 69 6e 20 61 20 73 65 63 74 6f 72 20   is in a sector 
fb50: 62 79 20 69 74 73 65 6c 66 20 73 6f 20 74 68 61  by itself so tha
fb60: 74 20 69 66 20 61 20 70 6f 77 65 72 20 6c 6f 73  t if a power los
fb70: 73 20 6f 63 63 75 72 73 20 77 68 69 6c 65 0a 77  s occurs while.w
fb80: 72 69 74 69 6e 67 20 74 68 65 20 73 65 63 74 6f  riting the secto
fb90: 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  r, information t
fba0: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  hat follows the 
fbb0: 68 65 61 64 65 72 20 77 69 6c 6c 20 62 65 0a 28  header will be.(
fbc0: 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e 64 61 6d  hopefully) undam
fbd0: 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  aged.</p>..<p>^A
fbe0: 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
fbf0: 61 6e 64 20 7a 65 72 6f 20 70 61 64 64 69 6e 67  and zero padding
fc00: 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72   are zero or mor
fc10: 65 20 70 61 67 65 20 72 65 63 6f 72 64 73 2e 20  e page records. 
fc20: 20 5e 45 61 63 68 0a 70 61 67 65 20 72 65 63 6f   ^Each.page reco
fc30: 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f 70 79  rd stores a copy
fc40: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
fc50: 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d 20 74  of a page from t
fc60: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
fc70: 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73 20 63  .before it was c
fc80: 68 61 6e 67 65 64 2e 20 20 5e 54 68 65 20 73 61  hanged.  ^The sa
fc90: 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f 74 20  me page may not 
fca0: 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68 61 6e  appear more than
fcb0: 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61 20 73   once.within a s
fcc0: 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  ingle rollback j
fcd0: 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c 62  ournal..To rollb
fce0: 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74  ack an incomplet
fcf0: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61  e transaction, a
fd00: 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d 65 72   process.has mer
fd10: 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68 65 20  ely to read the 
fd20: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
fd30: 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
fd40: 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69 74 65  to end and.write
fd50: 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69 6e 20   pages found in 
fd60: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61 63 6b  the journal back
fd70: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
fd80: 73 65 20 66 69 6c 65 20 61 74 20 74 68 65 0a 61  se file at the.a
fd90: 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63 61 74  ppropriate locat
fda0: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74  ion.</p>..<p>Let
fdb0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
fdc0: 67 65 20 73 69 7a 65 20 28 74 68 65 20 76 61 6c  ge size (the val
fdd0: 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
fde0: 72 20 61 74 20 6f 66 66 73 65 74 20 32 34 20 0a  r at offset 24 .
fdf0: 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68  in the journal h
fe00: 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54 68 65  eader) be N..The
fe10: 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  n the format of 
fe20: 61 20 70 61 67 65 20 72 65 63 6f 72 64 20 69 73  a page record is
fe30: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
fe40: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f  ..<center>.<i>Ro
fe50: 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 50  llback Journal P
fe60: 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61  age Record Forma
fe70: 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
fe80: 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
fe90: 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
fea0: 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
feb0: 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
fec0: 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >^(<td valign=to
fed0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
fee0: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
fef0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
ff00: 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70  >4.    <td>The p
ff10: 61 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  age number in th
ff20: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 29  e database file)
ff30: 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69  ^.<tr>^(<td vali
ff40: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ff50: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20 76 61  ter>4.    <td va
ff60: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
ff70: 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e  enter>N.    <td>
ff80: 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74  Original content
ff90: 20 6f 66 20 74 68 65 20 70 61 67 65 20 70 72 69   of the page pri
ffa0: 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  or to the start 
ffb0: 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  of the transacti
ffc0: 6f 6e 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76  on)^.<tr>^(<td v
ffd0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ffe0: 63 65 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c  center>N+4.    <
fff0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
10000 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
10010 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 29 5e 0a   <td>Checksum)^.
10020 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
10030 72 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 63 68  r>...<p>^(The ch
10040 65 63 6b 73 75 6d 20 69 73 20 61 6e 20 75 6e 73  ecksum is an uns
10050 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74  igned 32-bit int
10060 65 67 65 72 20 63 6f 6d 70 75 74 65 64 20 61 73  eger computed as
10070 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
10080 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69  ol>.<li>Initiali
10090 7a 65 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20  ze the checksum 
100a0 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20  to the checksum 
100b0 6e 6f 6e 63 65 20 76 61 6c 75 65 20 66 6f 75 6e  nonce value foun
100c0 64 20 69 6e 20 74 68 65 0a 6a 6f 75 72 6e 61 6c  d in the.journal
100d0 20 68 65 61 64 65 72 20 61 74 20 6f 66 66 73 65   header at offse
100e0 74 20 31 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61  t 12..<li>Initia
100f0 6c 69 7a 65 20 69 6e 64 65 78 20 58 20 74 6f 20  lize index X to 
10100 62 65 20 4e 2d 32 30 30 20 28 77 68 65 72 65 20  be N-200 (where 
10110 4e 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66  N is the size of
10120 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65   a database page
10130 0a 69 6e 20 62 79 74 65 73 2e 0a 3c 6c 69 3e 49  .in bytes..<li>I
10140 6e 74 65 72 70 72 65 74 20 74 68 65 20 66 6f 75  nterpret the fou
10150 72 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  r bytes at offse
10160 74 20 58 20 69 6e 74 6f 20 74 68 65 20 70 61 67  t X into the pag
10170 65 20 61 73 20 61 20 34 2d 62 79 74 65 20 62 69  e as a 4-byte bi
10180 67 2d 65 6e 64 69 61 6e 0a 75 6e 73 69 67 6e 65  g-endian.unsigne
10190 64 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20  d integer.  Add 
101a0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 61  the value of tha
101b0 74 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65  t integer to the
101c0 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53   checksum..<li>S
101d0 75 62 74 72 61 63 65 20 32 30 30 20 66 72 6f 6d  ubtrace 200 from
101e0 20 58 2e 0a 3c 6c 69 3e 49 66 20 58 20 69 73 20   X..<li>If X is 
101f0 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
10200 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 67  equal to zero, g
10210 6f 20 62 61 63 6b 20 74 6f 20 73 74 65 70 20 33  o back to step 3
10220 2e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68  ..</ol>)^..<p>Th
10230 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65  e checksum value
10240 20 69 73 20 75 73 65 64 20 74 6f 20 67 75 61 72   is used to guar
10250 64 20 61 67 61 69 6e 73 74 20 69 6e 63 6f 6d 70  d against incomp
10260 6c 65 74 65 20 77 72 69 74 65 73 20 6f 66 0a 61  lete writes of.a
10270 20 6a 6f 75 72 6e 61 6c 20 70 61 67 65 20 72 65   journal page re
10280 63 6f 72 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  cord following a
10290 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 2e 20   power failure. 
102a0 20 41 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e   A different ran
102b0 64 6f 6d 20 6e 6f 6e 63 65 0a 69 73 20 75 73 65  dom nonce.is use
102c0 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 74 72  d each time a tr
102d0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
102e0 72 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  rted in order to
102f0 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 69   minimize the ri
10300 73 6b 0a 74 68 61 74 20 75 6e 77 72 69 74 74 65  sk.that unwritte
10310 6e 20 73 65 63 74 6f 72 73 20 6d 69 67 68 74 20  n sectors might 
10320 62 79 20 63 68 61 6e 63 65 20 63 6f 6e 74 61 69  by chance contai
10330 6e 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20  n data from the 
10340 73 61 6d 65 20 70 61 67 65 0a 74 68 61 74 20 77  same page.that w
10350 61 73 20 61 20 70 61 72 74 20 6f 66 20 70 72 69  as a part of pri
10360 6f 72 20 6a 6f 75 72 6e 61 6c 73 2e 20 20 42 79  or journals.  By
10370 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 6e 6f   changing the no
10380 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 74 72 61  nce for each.tra
10390 6e 73 61 63 74 69 6f 6e 2c 20 73 74 61 6c 65 20  nsaction, stale 
103a0 64 61 74 61 20 6f 6e 20 64 69 73 6b 20 77 69 6c  data on disk wil
103b0 6c 20 73 74 69 6c 6c 20 67 65 6e 65 72 61 74 65  l still generate
103c0 20 61 6e 20 69 6e 63 6f 72 72 65 63 74 20 63 68   an incorrect ch
103d0 65 63 6b 73 75 6d 0a 61 6e 64 20 62 65 20 64 65  ecksum.and be de
103e0 74 65 63 74 65 64 20 77 69 74 68 20 68 69 67 68  tected with high
103f0 20 70 72 6f 62 61 62 69 6c 69 74 79 2e 20 20 54   probability.  T
10400 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 6c 79  he checksum only
10410 20 75 73 65 73 20 61 20 73 70 61 72 73 65 20 73   uses a sparse s
10420 61 6d 70 6c 65 0a 6f 66 20 33 32 2d 62 69 74 20  ample.of 32-bit 
10430 77 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20 64  words from the d
10440 61 74 61 20 72 65 63 6f 72 64 20 66 6f 72 20 70  ata record for p
10450 65 72 66 6f 72 6d 61 6e 63 65 20 72 65 61 73 6f  erformance reaso
10460 6e 73 20 2d 20 64 65 73 69 67 6e 20 73 74 75 64  ns - design stud
10470 69 65 73 20 0a 64 75 72 69 6e 67 20 74 68 65 20  ies .during the 
10480 70 6c 61 6e 6e 69 6e 67 20 70 68 61 73 65 73 20  planning phases 
10490 6f 66 20 53 51 4c 69 74 65 20 33 2e 30 2e 30 20  of SQLite 3.0.0 
104a0 73 68 6f 77 65 64 0a 61 20 73 69 67 6e 69 66 69  showed.a signifi
104b0 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
104c0 20 68 69 74 20 69 6e 20 63 68 65 63 6b 73 75 6d   hit in checksum
104d0 6d 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20  ming the entire 
104e0 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65  page.</p>..<p>Le
104f0 74 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74  t the page count
10500 20 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74   value at offset
10510 20 38 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61   8 in the journa
10520 6c 20 68 65 61 64 65 72 20 62 65 20 4d 2e 0a 5e  l header be M..^
10530 49 66 20 4d 20 69 73 20 67 72 65 61 74 65 72 20  If M is greater 
10540 74 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 61  than zero then a
10550 66 74 65 72 20 4d 20 70 61 67 65 20 72 65 63 6f  fter M page reco
10560 72 64 73 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  rds the journal 
10570 66 69 6c 65 0a 6d 61 79 20 62 65 20 7a 65 72 6f  file.may be zero
10580 20 70 61 64 64 65 64 20 6f 75 74 20 74 6f 20 74   padded out to t
10590 68 65 20 6e 65 78 74 20 6d 75 6c 74 69 70 6c 65  he next multiple
105a0 20 6f 66 20 74 68 65 20 73 65 63 74 6f 72 20 73   of the sector s
105b0 69 7a 65 20 61 6e 64 20 61 6e 6f 74 68 65 72 0a  ize and another.
105c0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 6d  journal header m
105d0 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  ay be inserted. 
105e0 20 5e 41 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68 65   ^All journal he
105f0 61 64 65 72 73 20 77 69 74 68 69 6e 20 74 68 65  aders within the
10600 20 73 61 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75   same.journal mu
10610 73 74 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73  st contain the s
10620 61 6d 65 20 64 61 74 61 62 61 73 65 20 70 61 67  ame database pag
10630 65 20 73 69 7a 65 20 61 6e 64 20 73 65 63 74 6f  e size and secto
10640 72 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  r size.</p>..<p>
10650 5e 49 66 20 4d 20 69 73 20 2d 31 20 69 6e 20 74  ^If M is -1 in t
10660 68 65 20 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e  he initial journ
10670 61 6c 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  al header, then 
10680 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
10690 67 65 20 72 65 63 6f 72 64 73 0a 74 68 61 74 20  ge records.that 
106a0 66 6f 6c 6c 6f 77 20 69 73 20 63 6f 6d 70 75 74  follow is comput
106b0 65 64 20 62 79 20 63 6f 6d 70 75 74 69 6e 67 20  ed by computing 
106c0 68 6f 77 20 6d 61 6e 79 20 70 61 67 65 20 72 65  how many page re
106d0 63 6f 72 64 73 20 77 69 6c 6c 20 66 69 74 20 69  cords will fit i
106e0 6e 0a 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20  n.the available 
106f0 73 70 61 63 65 20 6f 66 20 74 68 65 20 72 65 6d  space of the rem
10700 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 6a 6f  ainder of the jo
10710 75 72 6e 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a  urnal file.</p>.
10720 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
10730 74 20 77 61 6c 66 6f 72 6d 61 74 20 7b 57 41 4c  t walformat {WAL
10740 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c   format}</tcl>.<
10750 68 32 3e 34 2e 30 20 54 68 65 20 57 72 69 74 65  h2>4.0 The Write
10760 2d 41 68 65 61 64 20 4c 6f 67 3c 2f 68 32 3e 0a  -Ahead Log</h2>.
10770 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69  .<p>Beginning wi
10780 74 68 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e  th [version 3.7.
10790 30 5d 2c 20 53 51 4c 69 74 65 20 73 75 70 70 6f  0], SQLite suppo
107a0 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61  rts a new transa
107b0 63 74 69 6f 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65  ction.control me
107c0 63 68 61 6e 69 73 6d 20 63 61 6c 6c 65 64 20 22  chanism called "
107d0 5b 57 41 4c 20 7c 20 77 72 69 74 65 2d 61 68 65  [WAL | write-ahe
107e0 61 64 20 6c 6f 67 5d 22 20 6f 72 20 22 5b 57 41  ad log]" or "[WA
107f0 4c 5d 22 2e 0a 5e 57 68 65 6e 20 61 20 64 61 74  L]"..^When a dat
10800 61 62 61 73 65 20 69 73 20 69 6e 20 57 41 4c 20  abase is in WAL 
10810 6d 6f 64 65 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63  mode, all connec
10820 74 69 6f 6e 73 20 74 6f 20 74 68 61 74 20 64 61  tions to that da
10830 74 61 62 61 73 65 20 6d 75 73 74 0a 75 73 65 20  tabase must.use 
10840 74 68 65 20 57 41 4c 2e 20 20 5e 41 20 70 61 72  the WAL.  ^A par
10850 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
10860 20 77 69 6c 6c 20 75 73 65 20 65 69 74 68 65 72   will use either
10870 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
10880 6e 61 6c 0a 6f 72 20 61 20 57 41 4c 2c 20 62 75  nal.or a WAL, bu
10890 74 20 6e 6f 74 20 62 6f 74 68 20 61 74 20 74 68  t not both at th
108a0 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 5e 54 68  e same time..^Th
108b0 65 20 57 41 4c 20 69 73 20 61 6c 77 61 79 73 20  e WAL is always 
108c0 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20 73  located in the s
108d0 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61 73  ame directory as
108e0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69   the database.fi
108f0 6c 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73  le and has the s
10900 61 6d 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20  ame name as the 
10910 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 75  database file bu
10920 74 20 77 69 74 68 20 74 68 65 20 73 74 72 69 6e  t with the strin
10930 67 0a 22 3c 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e  g."<tt>-wal</tt>
10940 22 20 61 70 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a  " appended.</p>.
10950 0a 3c 68 33 3e 34 2e 31 20 57 41 4c 20 46 69 6c  .<h3>4.1 WAL Fil
10960 65 20 46 6f 72 6d 61 74 3c 2f 68 34 3e 0a 0a 3c  e Format</h4>..<
10970 70 3e 41 20 57 41 4c 20 66 69 6c 65 20 63 6f 6e  p>A WAL file con
10980 73 69 73 74 73 20 6f 66 20 61 20 68 65 61 64 65  sists of a heade
10990 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  r followed by ze
109a0 72 6f 20 6f 72 20 6d 6f 72 65 20 22 66 72 61 6d  ro or more "fram
109b0 65 73 22 2e 0a 45 61 63 68 20 66 72 61 6d 65 20  es"..Each frame 
109c0 72 65 63 6f 72 64 73 20 74 68 65 20 72 65 76 69  records the revi
109d0 73 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  sed content of a
109e0 20 73 69 6e 67 6c 65 20 70 61 67 65 20 66 72 6f   single page fro
109f0 6d 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  m the.database f
10a00 69 6c 65 2e 20 20 41 6c 6c 20 63 68 61 6e 67 65  ile.  All change
10a10 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
10a20 65 20 61 72 65 20 72 65 63 6f 72 64 65 64 20 62  e are recorded b
10a30 79 20 77 72 69 74 69 6e 67 0a 66 72 61 6d 65 73  y writing.frames
10a40 20 69 6e 74 6f 20 74 68 65 20 57 41 4c 2e 20 20   into the WAL.  
10a50 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6d  Transactions com
10a60 6d 69 74 20 77 68 65 6e 20 61 20 66 72 61 6d 65  mit when a frame
10a70 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 61 74   is written that
10a80 0a 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6d 6d  .contains a comm
10a90 69 74 20 6d 61 72 6b 65 72 2e 20 20 5e 41 20 73  it marker.  ^A s
10aa0 69 6e 67 6c 65 20 57 41 4c 20 63 61 6e 20 61 6e  ingle WAL can an
10ab0 64 20 75 73 75 61 6c 6c 79 20 64 6f 65 73 20 72  d usually does r
10ac0 65 63 6f 72 64 20 0a 6d 75 6c 74 69 70 6c 65 20  ecord .multiple 
10ad0 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 50  transactions.  P
10ae0 65 72 69 6f 64 69 63 61 6c 6c 79 2c 20 74 68 65  eriodically, the
10af0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
10b00 57 41 4c 20 69 73 0a 74 72 61 6e 73 66 65 72 72  WAL is.transferr
10b10 65 64 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ed back into the
10b20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
10b30 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63  n an operation c
10b40 61 6c 6c 65 64 20 61 0a 22 63 68 65 63 6b 70 6f  alled a."checkpo
10b50 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  int".</p>..<p>^A
10b60 20 73 69 6e 67 6c 65 20 57 41 4c 20 66 69 6c 65   single WAL file
10b70 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 20 6d   can be reused m
10b80 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 20 20  ultiple times.  
10b90 5e 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  ^In other words,
10ba0 20 74 68 65 0a 57 41 4c 20 63 61 6e 20 66 69 6c   the.WAL can fil
10bb0 6c 20 75 70 20 77 69 74 68 20 66 72 61 6d 65 73  l up with frames
10bc0 20 61 6e 64 20 74 68 65 6e 20 62 65 20 63 68 65   and then be che
10bd0 63 6b 70 6f 69 6e 74 65 64 20 61 6e 64 20 74 68  ckpointed and th
10be0 65 6e 20 6e 65 77 0a 66 72 61 6d 65 73 20 63 61  en new.frames ca
10bf0 6e 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  n overwrite the 
10c00 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e 41 20 57 41  old ones.  ^A WA
10c10 4c 20 61 6c 77 61 79 73 20 67 72 6f 77 73 20 66  L always grows f
10c20 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 0a 74 6f  rom beginning.to
10c30 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 43  ward the end.  C
10c40 68 65 63 6b 73 75 6d 73 20 61 6e 64 20 63 6f 75  hecksums and cou
10c50 6e 74 65 72 73 20 61 74 74 61 63 68 65 64 20 74  nters attached t
10c60 6f 20 65 61 63 68 20 66 72 61 6d 65 20 61 72 65  o each frame are
10c70 0a 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69  .used to determi
10c80 6e 65 20 77 68 69 63 68 20 66 72 61 6d 65 73 20  ne which frames 
10c90 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 20 61  within the WAL a
10ca0 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69  re valid and whi
10cb0 63 68 0a 61 72 65 20 6c 65 66 74 6f 76 65 72 73  ch.are leftovers
10cc0 20 66 72 6f 6d 20 70 72 69 6f 72 20 63 68 65 63   from prior chec
10cd0 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  kpoints.</p>..<p
10ce0 3e 5e 28 54 68 65 20 57 41 4c 20 68 65 61 64 65  >^(The WAL heade
10cf0 72 20 69 73 20 33 32 20 62 79 74 65 73 20 69 6e  r is 32 bytes in
10d00 20 73 69 7a 65 20 61 6e 64 20 63 6f 6e 73 69 73   size and consis
10d10 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ts of the follow
10d20 69 6e 67 20 65 69 67 68 74 0a 62 69 67 2d 65 6e  ing eight.big-en
10d30 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69  dian 32-bit unsi
10d40 67 6e 65 64 20 69 6e 74 65 67 65 72 20 76 61 6c  gned integer val
10d50 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  ues:</p>..<cente
10d60 72 3e 0a 3c 69 3e 57 41 4c 20 48 65 61 64 65 72  r>.<i>WAL Header
10d70 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
10d80 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
10d90 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
10da0 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
10db0 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
10dc0 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
10dd0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
10de0 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>0<td valign=t
10df0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
10e00 34 0a 20 20 20 20 3c 74 64 3e 4d 61 67 69 63 20  4.    <td>Magic 
10e10 6e 75 6d 62 65 72 2e 20 20 30 78 33 37 37 66 30  number.  0x377f0
10e20 36 38 32 20 6f 72 20 30 78 33 37 37 66 30 36 38  682 or 0x377f068
10e30 33 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  3.<tr><td valign
10e40 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
10e50 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>4<td valign=to
10e60 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
10e70 0a 20 20 20 20 3c 74 64 3e 46 69 6c 65 20 66 6f  .    <td>File fo
10e80 72 6d 61 74 20 76 65 72 73 69 6f 6e 2e 20 20 43  rmat version.  C
10e90 75 72 72 65 6e 74 6c 79 20 33 30 30 37 30 30 30  urrently 3007000
10ea0 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
10eb0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
10ec0 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>8<td valign=to
10ed0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
10ee0 0a 20 20 20 20 3c 74 64 3e 44 61 74 61 62 61 73  .    <td>Databas
10ef0 65 20 70 61 67 65 20 73 69 7a 65 2e 20 20 45 78  e page size.  Ex
10f00 61 6d 70 6c 65 3a 20 31 30 32 34 0a 3c 74 72 3e  ample: 1024.<tr>
10f10 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
10f20 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74  lign=center>12<t
10f30 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
10f40 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
10f50 3c 74 64 3e 43 68 65 63 6b 70 6f 69 6e 74 20 73  <td>Checkpoint s
10f60 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 0a 3c  equence number.<
10f70 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
10f80 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
10f90 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  6<td valign=top 
10fa0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
10fb0 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 3a 20 72     <td>Salt-1: r
10fc0 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20 69 6e  andom integer in
10fd0 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
10fe0 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c  ach checkpoint.<
10ff0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
11000 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
11010 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
11020 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
11030 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 3a 20 61     <td>Salt-2: a
11040 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f   different rando
11050 6d 20 6e 75 6d 62 65 72 20 66 6f 72 20 65 61 63  m number for eac
11060 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72  h checkpoint.<tr
11070 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
11080 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c  align=center>24<
11090 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
110a0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
110b0 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a   <td>Checksum-1:
110c0 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 61   First part of a
110d0 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65   checksum on the
110e0 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73 20   first 24 bytes 
110f0 6f 66 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74  of header.<tr><t
11100 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
11110 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64 20  gn=center>28<td 
11120 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
11130 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
11140 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20 53 65  d>Checksum-2: Se
11150 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 74 68 65  cond part of the
11160 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65   checksum on the
11170 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73 20   first 24 bytes 
11180 6f 66 20 68 65 61 64 65 72 0a 3c 2f 74 61 62 6c  of header.</tabl
11190 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  e>.</center>)^..
111a0 3c 70 3e 5e 49 6d 6d 65 64 69 61 74 65 6c 79 20  <p>^Immediately 
111b0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 77 61  following the wa
111c0 6c 2d 68 65 61 64 65 72 20 61 72 65 20 7a 65 72  l-header are zer
111d0 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61 6d 65 73  o or more frames
111e0 2e 20 5e 45 61 63 68 0a 66 72 61 6d 65 20 63 6f  . ^Each.frame co
111f0 6e 73 69 73 74 73 20 6f 66 20 61 20 32 34 2d 62  nsists of a 24-b
11200 79 74 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  yte frame-header
11210 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 3c   followed by a <
11220 69 3e 70 61 67 65 2d 73 69 7a 65 3c 2f 69 3e 20  i>page-size</i> 
11230 62 79 74 65 73 0a 6f 66 20 70 61 67 65 20 64 61  bytes.of page da
11240 74 61 2e 20 5e 28 54 68 65 20 66 72 61 6d 65 2d  ta. ^(The frame-
11250 68 65 61 64 65 72 20 69 73 20 73 69 78 20 62 69  header is six bi
11260 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20  g-endian 32-bit 
11270 75 6e 73 69 67 6e 65 64 20 0a 69 6e 74 65 67 65  unsigned .intege
11280 72 20 76 61 6c 75 65 73 2c 20 61 73 20 66 6f 6c  r values, as fol
11290 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a  lows:..<center>.
112a0 3c 69 3e 57 41 4c 20 46 72 61 6d 65 20 48 65 61  <i>WAL Frame Hea
112b0 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  der Format</i><b
112c0 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
112d0 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
112e0 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74  <tr><th>Offset<t
112f0 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69  h>Size<th>Descri
11300 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61  ption.<tr><td va
11310 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
11320 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67  enter>0<td valig
11330 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
11340 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 50 61 67  er>4.    <td>Pag
11350 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64  e number.<tr><td
11360 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
11370 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61  n=center>4<td va
11380 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
11390 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
113a0 46 6f 72 20 63 6f 6d 6d 69 74 20 72 65 63 6f 72  For commit recor
113b0 64 73 2c 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ds, the size of 
113c0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
113d0 65 20 69 6e 20 70 61 67 65 73 0a 20 20 20 20 20  e in pages.     
113e0 20 20 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d     after the com
113f0 6d 69 74 2e 20 20 46 6f 72 20 61 6c 6c 20 6f 74  mit.  For all ot
11400 68 65 72 20 72 65 63 6f 72 64 73 2c 20 7a 65 72  her records, zer
11410 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  o..<tr><td valig
11420 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
11430 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
11440 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
11450 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31  4.    <td>Salt-1
11460 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
11470 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e   WAL header.<tr>
11480 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11490 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74  lign=center>12<t
114a0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
114b0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
114c0 3c 74 64 3e 53 61 6c 74 2d 32 20 63 6f 70 69 65  <td>Salt-2 copie
114d0 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68  d from the WAL h
114e0 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  eader.<tr><td va
114f0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
11500 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69  enter>16<td vali
11510 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
11520 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
11530 65 63 6b 73 75 6d 2d 31 3a 20 20 43 75 6d 75 6c  ecksum-1:  Cumul
11540 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 20 75  ative checksum u
11550 70 20 74 68 72 6f 75 67 68 20 61 6e 64 20 69 6e  p through and in
11560 63 6c 75 64 69 6e 67 20 74 68 69 73 20 70 61 67  cluding this pag
11570 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  e.<tr><td valign
11580 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11590 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>20<td valign=t
115a0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
115b0 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73  4.    <td>Checks
115c0 75 6d 2d 32 3a 20 20 53 65 63 6f 6e 64 20 68 61  um-2:  Second ha
115d0 6c 66 20 6f 66 20 74 68 65 20 63 75 6d 75 6c 61  lf of the cumula
115e0 74 69 76 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c  tive checksum..<
115f0 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
11600 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72 61 6d  >)^..^(<p>A fram
11610 65 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  e is considered 
11620 76 61 6c 69 64 20 69 66 20 61 6e 64 20 6f 6e 6c  valid if and onl
11630 79 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y if the followi
11640 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72  ng conditions ar
11650 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c  e.true:</p>..<ol
11660 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 61 6c  >.<li><p>The sal
11670 74 2d 31 20 61 6e 64 20 73 61 6c 74 2d 32 20 76  t-1 and salt-2 v
11680 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 72 61  alues in the fra
11690 6d 65 2d 68 65 61 64 65 72 20 6d 61 74 63 68 0a  me-header match.
116a0 20 20 20 20 20 20 20 73 61 6c 74 20 76 61 6c 75         salt valu
116b0 65 73 20 69 6e 20 74 68 65 20 77 61 6c 2d 68 65  es in the wal-he
116c0 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ader</p></li>..<
116d0 6c 69 3e 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  li><p>The checks
116e0 75 6d 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  um values in the
116f0 20 66 69 6e 61 6c 20 38 20 62 79 74 65 73 20 6f   final 8 bytes o
11700 66 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61 64  f the frame-head
11710 65 72 0a 20 20 20 20 20 20 20 65 78 61 63 74 6c  er.       exactl
11720 79 20 6d 61 74 63 68 20 74 68 65 20 63 68 65 63  y match the chec
11730 6b 73 75 6d 20 63 6f 6d 70 75 74 65 64 20 63 6f  ksum computed co
11740 6e 73 65 63 75 74 69 76 65 6c 79 20 6f 6e 20 74  nsecutively on t
11750 68 65 0a 20 20 20 20 20 20 20 66 69 72 73 74 20  he.       first 
11760 32 34 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  24 bytes of the 
11770 57 41 4c 20 68 65 61 64 65 72 20 61 6e 64 20 74  WAL header and t
11780 68 65 20 66 69 72 73 74 20 38 20 62 79 74 65 73  he first 8 bytes
11790 20 61 6e 64 0a 20 20 20 20 20 20 20 74 68 65 20   and.       the 
117a0 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c 6c 20 66  content of all f
117b0 72 61 6d 65 73 0a 20 20 20 20 20 20 20 75 70 20  rames.       up 
117c0 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
117d0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
117e0 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69  me.</p></li></li
117f0 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e  >.</ol>)^..<tcl>
11800 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 63  hd_fragment walc
11810 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63 6b 73 75  ksm {WAL checksu
11820 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63  m algorithm}</tc
11830 6c 3e 0a 3c 68 33 3e 34 2e 32 20 43 68 65 63 6b  l>.<h3>4.2 Check
11840 73 75 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68  sum Algorithm</h
11850 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  3>..<p>The check
11860 73 75 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20  sum is computed 
11870 62 79 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  by interpreting 
11880 74 68 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20  the input as.an 
11890 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75  even number of u
118a0 6e 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69  nsigned 32-bit i
118b0 6e 74 65 67 65 72 73 3a 20 78 28 30 29 20 74 68  ntegers: x(0) th
118c0 72 6f 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65  rough x(N)..^The
118d0 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73   32-bit integers
118e0 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20   are big-endian 
118f0 69 66 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d  if the.magic num
11900 62 65 72 20 69 6e 20 74 68 65 20 66 69 72 73 74  ber in the first
11910 20 34 20 62 79 74 65 73 20 6f 66 20 74 68 65 20   4 bytes of the 
11920 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 30 78  WAL header is 0x
11930 33 37 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65  377f0683 and.the
11940 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69   integers are li
11950 74 74 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20 74  ttle-endian if t
11960 68 65 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20  he magic number 
11970 69 73 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e  is 0x377f0682..^
11980 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c  The checksum val
11990 75 65 73 20 61 72 65 20 61 6c 77 61 79 73 20 73  ues are always s
119a0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 66 72 61  tored in the fra
119b0 6d 65 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62  me header in a.b
119c0 69 67 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74  ig-endian format
119d0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
119e0 68 69 63 68 20 62 79 74 65 20 6f 72 64 65 72 20  hich byte order 
119f0 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75  is used to compu
11a00 74 65 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e  te.the checksum.
11a10 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65  </p>..<p>The che
11a20 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20  cksum algorithm 
11a30 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
11a40 6f 6e 74 65 6e 74 20 77 68 69 63 68 20 69 73 20  ontent which is 
11a50 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20  a multiple of.8 
11a60 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
11a70 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
11a80 2c 20 69 66 20 74 68 65 20 69 6e 70 75 74 73 20  , if the inputs 
11a90 61 72 65 20 78 28 30 29 20 74 68 72 6f 75 67 68  are x(0) through
11aa0 20 78 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73   x(N).then N mus
11ab0 74 20 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20  t be odd..^(The 
11ac0 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74  checksum algorit
11ad0 68 6d 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  hm is as follows
11ae0 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
11af0 70 72 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20  pre> .s0 = s1 = 
11b00 30 0a 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74  0.for i from 0 t
11b10 6f 20 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20  o n-1 step 2:.  
11b20 20 73 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31   s0 += x(i) + s1
11b30 3b 0a 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31  ;.   s1 += x(i+1
11b40 29 20 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23  ) + s0;.endfor.#
11b50 20 72 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e   result in s0 an
11b60 64 20 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d s1.</pre></blo
11b70 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e  ckquote>)^..<p>^
11b80 54 68 65 20 6f 75 74 70 75 74 73 20 73 30 20 61  The outputs s0 a
11b90 6e 64 20 73 31 20 61 72 65 20 62 6f 74 68 20 77  nd s1 are both w
11ba0 65 69 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d  eighted checksum
11bb0 73 20 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63  s using Fibonacc
11bc0 69 20 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76  i weights.in rev
11bd0 65 72 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54  erse order.  (^T
11be0 68 65 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e  he largest Fibon
11bf0 61 63 63 69 20 77 65 69 67 68 74 20 6f 63 63 75  acci weight occu
11c00 72 73 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  rs on the first 
11c10 65 6c 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73  element.of the s
11c20 65 71 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75  equence being su
11c30 6d 6d 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20  mmed.)  ^The s1 
11c40 76 61 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20  value spans all 
11c50 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74  32-bit integer.t
11c60 65 72 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75  erms of the sequ
11c70 65 6e 63 65 20 77 68 65 72 65 61 73 20 73 30 20  ence whereas s0 
11c80 6f 6d 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20  omits the final 
11c90 74 65 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34  term.</p>..<h3>4
11ca0 2e 33 20 43 68 65 63 6b 70 6f 69 6e 74 20 41 6c  .3 Checkpoint Al
11cb0 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70  gorithm</h3>..<p
11cc0 3e 5e 4f 6e 20 61 20 5b 63 68 65 63 6b 70 6f 69  >^On a [checkpoi
11cd0 6e 74 5d 2c 20 74 68 65 20 57 41 4c 20 69 73 20  nt], the WAL is 
11ce0 66 69 72 73 74 20 66 6c 75 73 68 65 64 20 74 6f  first flushed to
11cf0 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72   persistent stor
11d00 61 67 65 20 75 73 69 6e 67 0a 74 68 65 20 78 53  age using.the xS
11d10 79 6e 63 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  ync method of th
11d20 65 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65  e [sqlite3_io_me
11d30 74 68 6f 64 73 20 7c 20 56 46 53 5d 2e 20 0a 5e  thods | VFS]. .^
11d40 54 68 65 6e 20 76 61 6c 69 64 20 63 6f 6e 74 65  Then valid conte
11d50 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73  nt of the WAL is
11d60 20 74 72 61 6e 73 66 65 72 72 65 64 20 69 6e 74   transferred int
11d70 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
11d80 69 6c 65 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74  ile..^Finally, t
11d90 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66  he database is f
11da0 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69 73  lushed to persis
11db0 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69  tent storage usi
11dc0 6e 67 20 61 6e 6f 74 68 65 72 0a 78 53 79 6e 63  ng another.xSync
11dd0 20 6d 65 74 68 6f 64 20 63 61 6c 6c 2e 0a 54 68   method call..Th
11de0 65 20 78 53 79 6e 63 20 6f 70 65 72 61 74 69 6f  e xSync operatio
11df0 6e 73 20 73 65 72 76 65 20 61 73 20 77 72 69 74  ns serve as writ
11e00 65 20 62 61 72 72 69 65 72 73 20 2d 20 61 6c 6c  e barriers - all
11e10 20 77 72 69 74 65 73 20 6c 61 75 6e 63 68 65 64   writes launched
11e20 0a 62 65 66 6f 72 65 20 74 68 65 20 78 53 79 6e  .before the xSyn
11e30 63 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  c must complete 
11e40 62 65 66 6f 72 65 20 61 6e 79 20 77 72 69 74 65  before any write
11e50 20 74 68 61 74 20 6c 61 75 6e 63 68 65 73 20 61   that launches a
11e60 66 74 65 72 20 74 68 65 0a 78 53 79 6e 63 20 62  fter the.xSync b
11e70 65 67 69 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  egins.</p>..<p>^
11e80 41 66 74 65 72 20 65 61 63 68 20 63 68 65 63 6b  After each check
11e90 70 6f 69 6e 74 2c 20 74 68 65 20 57 41 4c 20 68  point, the WAL h
11ea0 65 61 64 65 72 20 73 61 6c 74 2d 31 20 76 61 6c  eader salt-1 val
11eb0 75 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ue is incremente
11ec0 64 20 61 6e 64 20 74 68 65 20 0a 73 61 6c 74 2d  d and the .salt-
11ed0 32 20 76 61 6c 75 65 20 69 73 20 72 61 6e 64 6f  2 value is rando
11ee0 6d 69 7a 65 64 2e 20 20 54 68 69 73 20 70 72 65  mized.  This pre
11ef0 76 65 6e 74 73 20 6f 6c 64 20 61 6e 64 20 6e 65  vents old and ne
11f00 77 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20  w frames in the 
11f10 57 41 4c 20 66 72 6f 6d 0a 62 65 69 6e 67 20 63  WAL from.being c
11f20 6f 6e 73 69 64 65 72 65 64 20 76 61 6c 69 64 20  onsidered valid 
11f30 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
11f40 20 61 6e 64 20 62 65 69 6e 67 20 63 68 65 63 6b   and being check
11f50 70 6f 69 6e 74 69 6e 67 20 74 6f 67 65 74 68 65  pointing togethe
11f60 72 0a 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 63 72  r.following a cr
11f70 61 73 68 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ash.</p>..<tcl>h
11f80 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 72 65  d_fragment walre
11f90 61 64 20 7b 57 41 4c 20 72 65 61 64 20 61 6c 67  ad {WAL read alg
11fa0 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68  orithm}</tcl>.<h
11fb0 33 3e 34 2e 34 20 52 65 61 64 65 72 20 41 6c 67  3>4.4 Reader Alg
11fc0 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e  orithm</h3>..<p>
11fd0 5e 28 54 6f 20 72 65 61 64 20 61 20 70 61 67 65  ^(To read a page
11fe0 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
11ff0 73 65 20 28 63 61 6c 6c 20 69 74 20 70 61 67 65  se (call it page
12000 20 6e 75 6d 62 65 72 20 50 29 2c 20 61 20 72 65   number P), a re
12010 61 64 65 72 0a 66 69 72 73 74 20 63 68 65 63 6b  ader.first check
12020 73 20 74 68 65 20 57 41 4c 20 74 6f 20 73 65 65  s the WAL to see
12030 20 69 66 20 69 74 20 63 6f 6e 74 61 69 6e 73 20   if it contains 
12040 70 61 67 65 20 50 2e 20 20 49 66 20 73 6f 2c 20  page P.  If so, 
12050 74 68 65 6e 20 74 68 65 0a 6c 61 73 74 20 76 61  then the.last va
12060 6c 69 64 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  lid instance of 
12070 70 61 67 65 20 50 20 74 68 61 74 20 69 73 20 66  page P that is f
12080 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
12090 6d 69 74 20 66 72 61 6d 65 0a 6f 72 20 69 73 20  mit frame.or is 
120a0 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 20 69  a commit frame i
120b0 74 73 65 6c 66 20 62 65 63 6f 6d 65 73 20 74 68  tself becomes th
120c0 65 20 76 61 6c 75 65 20 72 65 61 64 2e 29 5e 20  e value read.)^ 
120d0 20 5e 49 66 20 74 68 65 20 57 41 4c 0a 63 6f 6e   ^If the WAL.con
120e0 74 61 69 6e 73 20 6e 6f 20 63 6f 70 69 65 73 20  tains no copies 
120f0 6f 66 20 70 61 67 65 20 50 20 74 68 61 74 20 61  of page P that a
12100 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69  re valid and whi
12110 63 68 20 61 72 65 20 61 20 63 6f 6d 6d 69 74 0a  ch are a commit.
12120 66 72 61 6d 65 20 6f 72 20 61 72 65 20 66 6f 6c  frame or are fol
12130 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69  lowed by a commi
12140 74 20 66 72 61 6d 65 2c 20 74 68 65 6e 20 70 61  t frame, then pa
12150 67 65 20 50 20 69 73 20 72 65 61 64 20 66 72 6f  ge P is read fro
12160 6d 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m.the database f
12170 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20  ile.</p>..<p>To 
12180 73 74 61 72 74 20 61 20 72 65 61 64 20 74 72 61  start a read tra
12190 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 72 65  nsaction, the re
121a0 61 64 65 72 20 72 65 63 6f 72 64 73 20 74 68 65  ader records the
121b0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 6c 61   index of the la
121c0 73 74 0a 76 61 6c 69 64 20 66 72 61 6d 65 20 69  st.valid frame i
121d0 6e 20 74 68 65 20 57 41 4c 2e 20 20 54 68 65 20  n the WAL.  The 
121e0 72 65 61 64 65 72 20 75 73 65 73 20 74 68 69 73  reader uses this
121f0 20 72 65 63 6f 72 64 65 64 20 22 6d 78 46 72 61   recorded "mxFra
12200 6d 65 22 20 76 61 6c 75 65 0a 66 6f 72 20 61 6c  me" value.for al
12210 6c 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 61  l subsequent rea
12220 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 4e  d operations.  N
12230 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ew transactions 
12240 63 61 6e 20 62 65 20 61 70 70 65 6e 64 65 64 0a  can be appended.
12250 74 6f 20 74 68 65 20 57 41 4c 2c 20 62 75 74 20  to the WAL, but 
12260 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 72  as long as the r
12270 65 61 64 65 72 20 75 73 65 73 20 69 74 73 20 6f  eader uses its o
12280 72 69 67 69 6e 61 6c 20 6d 78 46 72 61 6d 65 20  riginal mxFrame 
12290 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e 6f 72 65  value.and ignore
122a0 73 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61  s subsequently a
122b0 70 70 65 6e 64 65 64 20 63 6f 6e 74 65 6e 74 2c  ppended content,
122c0 20 74 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c   the reader will
122d0 20 73 65 65 20 61 20 0a 63 6f 6e 73 69 73 74 65   see a .consiste
122e0 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f 66 20 74  nt snapshot of t
122f0 68 65 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d  he database from
12300 20 61 20 73 69 6e 67 6c 65 20 70 6f 69 6e 74 20   a single point 
12310 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54 68 69 73  in time.  .^This
12320 20 74 65 63 68 6e 69 71 75 65 20 61 6c 6c 6f 77   technique allow
12330 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e 63 75  s multiple concu
12340 72 72 65 6e 74 20 72 65 61 64 65 72 73 20 74 6f  rrent readers to
12350 20 76 69 65 77 20 64 69 66 66 65 72 65 6e 74 20   view different 
12360 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65  .versions of the
12370 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e   database conten
12380 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79  t simultaneously
12390 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
123a0 61 64 65 72 20 61 6c 67 6f 72 69 74 68 6d 20 69  ader algorithm i
123b0 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70  n the previous p
123c0 61 72 61 67 72 61 70 68 73 20 77 6f 72 6b 73 20  aragraphs works 
123d0 63 6f 72 72 65 63 74 6c 79 2c 20 62 75 74 20 0a  correctly, but .
123e0 62 65 63 61 75 73 65 20 66 72 61 6d 65 73 20 66  because frames f
123f0 6f 72 20 70 61 67 65 20 50 20 63 61 6e 20 61 70  or page P can ap
12400 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 77 69  pear anywhere wi
12410 74 68 69 6e 20 74 68 65 20 57 41 4c 2c 20 74 68  thin the WAL, th
12420 65 0a 72 65 61 64 65 72 20 68 61 73 20 74 6f 20  e.reader has to 
12430 73 63 61 6e 20 74 68 65 20 65 6e 74 69 72 65 20  scan the entire 
12440 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  WAL looking for 
12450 70 61 67 65 20 50 20 66 72 61 6d 65 73 2e 20 20  page P frames.  
12460 49 66 20 74 68 65 0a 57 41 4c 20 69 73 20 6c 61  If the.WAL is la
12470 72 67 65 20 28 6d 75 6c 74 69 70 6c 65 20 6d 65  rge (multiple me
12480 67 61 62 79 74 65 73 20 69 73 20 74 79 70 69 63  gabytes is typic
12490 61 6c 29 20 74 68 61 74 20 73 63 61 6e 20 63 61  al) that scan ca
124a0 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e 64 20 72  n be slow,.and r
124b0 65 61 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ead performance 
124c0 73 75 66 66 65 72 73 2e 20 20 5e 54 6f 20 6f 76  suffers.  ^To ov
124d0 65 72 63 6f 6d 65 20 74 68 69 73 20 70 72 6f 62  ercome this prob
124e0 6c 65 6d 2c 20 61 20 73 65 70 61 72 61 74 65 0a  lem, a separate.
124f0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20 63  data structure c
12500 61 6c 6c 65 64 20 74 68 65 20 77 61 6c 2d 69 6e  alled the wal-in
12510 64 65 78 20 69 73 20 6d 61 69 6e 74 61 69 6e 65  dex is maintaine
12520 64 20 74 6f 20 65 78 70 65 64 69 74 65 20 74 68  d to expedite th
12530 65 0a 73 65 61 72 63 68 20 66 6f 72 20 66 72 61  e.search for fra
12540 6d 65 73 20 6f 66 20 61 20 70 61 72 74 69 63 75  mes of a particu
12550 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c  lar page.</p>..<
12560 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
12570 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61 74 20 7b  walindexformat {
12580 77 61 6c 2d 69 6e 64 65 78 7d 20 7b 57 41 4c 2d  wal-index} {WAL-
12590 69 6e 64 65 78 20 66 6f 72 6d 61 74 7d 3c 2f 74  index format}</t
125a0 63 6c 3e 0a 3c 68 33 3e 34 2e 35 20 57 41 4c 2d  cl>.<h3>4.5 WAL-
125b0 49 6e 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 33  Index Format</h3
125c0 3e 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c  >..<p>Conceptual
125d0 6c 79 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  ly, the wal-inde
125e0 78 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f  x is shared memo
125f0 72 79 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63  ry, though the c
12600 75 72 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65  urrent.VFS imple
12610 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61  mentations use a
12620 20 6d 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f   mmapped file fo
12630 72 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e  r the wal-index.
12640 20 20 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a 66    ^The mmapped.f
12650 69 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73 61  ile is in the sa
12660 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61 73 20  me directory as 
12670 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
12680 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61   has the same na
12690 6d 65 0a 61 73 20 74 68 65 20 64 61 74 61 62 61  me.as the databa
126a0 73 65 20 77 69 74 68 20 61 20 22 3c 74 74 3e 2d  se with a "<tt>-
126b0 73 68 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69 78  shm</tt>" suffix
126c0 20 61 70 70 65 6e 64 65 64 2e 20 20 42 65 63 61   appended.  Beca
126d0 75 73 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65  use.the wal-inde
126e0 78 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f  x is shared memo
126f0 72 79 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20  ry, SQLite does 
12700 6e 6f 74 20 73 75 70 70 6f 72 74 20 0a 5b 50 52  not support .[PR
12710 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
12720 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  e | journal_mode
12730 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77  =WAL] .on a netw
12740 6f 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 20 77  ork filesystem w
12750 68 65 6e 20 63 6c 69 65 6e 74 73 20 61 72 65 20  hen clients are 
12760 6f 6e 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63  on different mac
12770 68 69 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73  hines..All users
12780 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
12790 20 6d 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f   must be able to
127a0 20 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20   share the same 
127b0 6d 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  memory.</p>..<p>
127c0 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
127d0 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
127e0 74 6f 20 61 6e 73 77 65 72 20 74 68 69 73 20 71  to answer this q
127f0 75 65 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a  uestion quickly:
12800 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
12810 65 3e 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61  e><i>.Given a pa
12820 67 65 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20  ge number P and 
12830 61 20 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72  a maximum WAL fr
12840 61 6d 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74  ame index M,.ret
12850 75 72 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20  urn the largest 
12860 57 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20  WAL frame index 
12870 66 6f 72 20 70 61 67 65 20 50 20 74 68 61 74 20  for page P that 
12880 64 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20  does not exceed 
12890 4d 2c 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55  M, .or return NU
128a0 4c 4c 20 69 66 20 74 68 65 72 65 20 61 72 65 20  LL if there are 
128b0 6e 6f 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61  no frames for pa
128c0 67 65 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74  ge P that do not
128d0 20 65 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c   exceed M..</i><
128e0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
128f0 3e 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61  >The <i>M</i> va
12900 6c 75 65 20 69 6e 20 74 68 65 20 70 72 65 76 69  lue in the previ
12910 6f 75 73 20 70 61 72 61 67 72 61 70 68 20 69 73  ous paragraph is
12920 20 74 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76   the "mxFrame" v
12930 61 6c 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20  alue.defined in 
12940 5b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69  [WAL read algori
12950 74 68 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e  thm | section 4.
12960 34 5d 20 74 68 61 74 20 69 73 20 72 65 61 64 20  4] that is read 
12970 61 74 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66  at the start .of
12980 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61   a transaction a
12990 6e 64 20 77 68 69 63 68 20 64 65 66 69 6e 65 73  nd which defines
129a0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61   the maximum fra
129b0 6d 65 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20  me from the WAL 
129c0 74 68 61 74 20 0a 74 68 65 20 72 65 61 64 65 72  that .the reader
129d0 20 77 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a   will use.</p>..
129e0 3c 70 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78  <p>The wal-index
129f0 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20   is transient.  
12a00 41 66 74 65 72 20 61 20 63 72 61 73 68 2c 20 74  After a crash, t
12a10 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a  he wal-index is.
12a20 72 65 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72  reconstructed fr
12a30 6f 6d 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  om the original 
12a40 57 41 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20  WAL file.  ^The 
12a50 56 46 53 20 69 73 20 72 65 71 75 69 72 65 64 0a  VFS is required.
12a60 74 6f 20 65 69 74 68 65 72 20 74 72 75 6e 63 61  to either trunca
12a70 74 65 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68  te or zero the h
12a80 65 61 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c  eader of the wal
12a90 2d 69 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20  -index when the 
12aa0 6c 61 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20  last.connection 
12ab0 74 6f 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42  to it closes.  B
12ac0 65 63 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69  ecause the wal-i
12ad0 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e  ndex is transien
12ae0 74 2c 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e  t, it can.use an
12af0 20 61 72 63 68 69 74 65 63 74 75 72 65 2d 73 70   architecture-sp
12b00 65 63 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69  ecific format; i
12b10 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  t does not have 
12b20 74 6f 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74  to be cross-plat
12b30 66 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c  form..Hence, unl
12b40 69 6b 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ike the database
12b50 20 61 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f   and WAL file fo
12b60 72 6d 61 74 73 20 77 68 69 63 68 20 73 74 6f 72  rmats which stor
12b70 65 20 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20  e all values.as 
12b80 62 69 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20  big endian, the 
12b90 77 61 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73  wal-index stores
12ba0 20 6d 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75   multi-byte valu
12bb0 65 73 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65  es in the native
12bc0 0a 62 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74  .byte order of t
12bd0 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72  he host computer
12be0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64  .</p>..<p>This d
12bf0 6f 63 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65  ocument is conce
12c00 72 6e 65 64 20 77 69 74 68 20 74 68 65 20 70 65  rned with the pe
12c10 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f  rsistent state o
12c20 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66  f the database.f
12c30 69 6c 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74  ile, and since t
12c40 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
12c50 61 20 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75  a transient stru
12c60 63 74 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65  cture, no furthe
12c70 72 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  r .information a
12c80 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
12c90 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
12ca0 20 77 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65   will be provide
12cb0 64 20 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65  d here..Complete
12cc0 20 64 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20   details on the 
12cd0 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61  format of the wa
12ce0 6c 2d 69 6e 64 65 78 20 61 72 65 20 63 6f 6e 74  l-index are cont
12cf0 61 69 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d  ained within.com
12d00 6d 65 6e 74 73 20 69 6e 20 53 51 4c 69 74 65 20  ments in SQLite 
12d10 73 6f 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e  source code.</p>
12d20 0a                                               .