Documentation Source Text

Hex Artifact Content
Login

Artifact c27ca9fdbce96f56705ef2dc7fb10f07218b1c04:


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 32 34 3c 74 64  ign=center>24<td
1a30: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 52 65 73   align=left>.Res
1a40: 65 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73  erved for expans
1a50: 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 7a 65  ion.  Must be ze
1a60: 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ro..<tr><td vali
1a70: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1a80: 74 65 72 3e 39 32 3c 74 64 20 76 61 6c 69 67 6e  ter>92<td valign
1a90: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1aa0: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1ab0: 74 3e 0a 54 68 65 20 5b 76 65 72 73 69 6f 6e 2d  t>.The [version-
1ac0: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
1ad0: 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ]..<tr><td valig
1ae0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1af0: 65 72 3e 39 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>96<td valign=
1b00: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1b10: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1b20: 3e 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  >.[SQLITE_VERSIO
1b30: 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f 74 61 62 6c  N_NUMBER].</tabl
1b40: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 68 34  e></center>..<h4
1b50: 3e 31 2e 32 2e 31 20 4d 61 67 69 63 20 48 65 61  >1.2.1 Magic Hea
1b60: 64 65 72 20 53 74 72 69 6e 67 3c 2f 68 34 3e 0a  der String</h4>.
1b70: 0a 3c 70 3e 5e 45 76 65 72 79 20 76 61 6c 69 64  .<p>^Every valid
1b80: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
1b90: 20 66 69 6c 65 20 62 65 67 69 6e 73 20 77 69 74   file begins wit
1ba0: 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  h the following 
1bb0: 31 36 20 62 79 74 65 73 20 0a 28 69 6e 20 68 65  16 bytes .(in he
1bc0: 78 29 3a 20 35 33 20 35 31 20 34 63 20 36 39 20  x): 53 51 4c 69 
1bd0: 37 34 20 36 35 20 32 30 20 36 36 20 36 66 20 37  74 65 20 66 6f 7
1be0: 32 20 36 64 20 36 31 20 37 34 20 32 30 20 33 33  2 6d 61 74 20 33
1bf0: 20 30 30 2e 20 20 54 68 69 73 20 62 79 74 65 20   00.  This byte 
1c00: 73 65 71 75 65 6e 63 65 0a 63 6f 72 72 65 73 70  sequence.corresp
1c10: 6f 6e 64 73 20 74 6f 20 74 68 65 20 55 54 46 2d  onds to the UTF-
1c20: 38 20 73 74 72 69 6e 67 20 22 53 51 4c 69 74 65  8 string "SQLite
1c30: 20 66 6f 72 6d 61 74 20 33 22 20 69 6e 63 6c 75   format 3" inclu
1c40: 64 69 6e 67 20 74 68 65 20 6e 75 6c 0a 74 65 72  ding the nul.ter
1c50: 6d 69 6e 61 74 6f 72 20 63 68 61 72 61 63 74 65  minator characte
1c60: 72 20 61 74 20 74 68 65 20 65 6e 64 2e 3c 2f 70  r at the end.</p
1c70: 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32 20 50 61 67  >..<h4>1.2.2 Pag
1c80: 65 20 53 69 7a 65 3c 2f 68 34 3e 0a 0a 3c 70 3e  e Size</h4>..<p>
1c90: 54 68 65 20 74 77 6f 2d 62 79 74 65 20 76 61 6c  The two-byte val
1ca0: 75 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 74 20  ue beginning at 
1cb0: 6f 66 66 73 65 74 20 31 36 20 64 65 74 65 72 6d  offset 16 determ
1cc0: 69 6e 65 73 20 74 68 65 20 70 61 67 65 20 73 69  ines the page si
1cd0: 7a 65 20 6f 66 20 0a 74 68 65 20 64 61 74 61 62  ze of .the datab
1ce0: 61 73 65 2e 20 20 46 6f 72 20 53 51 4c 69 74 65  ase.  For SQLite
1cf0: 20 76 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 2e   versions 3.7.0.
1d00: 31 20 61 6e 64 20 65 61 72 6c 69 65 72 2c 20 74  1 and earlier, t
1d10: 68 69 73 20 76 61 6c 75 65 20 69 73 20 0a 69 6e  his value is .in
1d20: 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 62  terpreted as a b
1d30: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
1d40: 72 20 61 6e 64 20 6d 75 73 74 20 62 65 20 61 20  r and must be a 
1d50: 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74  power of two bet
1d60: 77 65 65 6e 0a 35 31 32 20 61 6e 64 20 33 32 37  ween.512 and 327
1d70: 36 38 2c 20 69 6e 63 6c 75 73 69 76 65 2e 20 20  68, inclusive.  
1d80: 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 53  Beginning with S
1d90: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
1da0: 37 2e 31 2c 20 61 20 70 61 67 65 0a 73 69 7a 65  7.1, a page.size
1db0: 20 6f 66 20 36 35 35 33 36 20 62 79 74 65 73 20   of 65536 bytes 
1dc0: 69 73 20 73 75 70 70 6f 72 74 65 64 2e 20 20 54  is supported.  T
1dd0: 68 65 20 76 61 6c 75 65 20 36 35 35 33 36 20 77  he value 65536 w
1de0: 69 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 61  ill not fit in a
1df0: 0a 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65  .two-byte intege
1e00: 72 2c 20 73 6f 20 74 6f 20 73 70 65 63 69 66 79  r, so to specify
1e10: 20 61 20 36 35 35 33 36 2d 62 79 74 65 20 70 61   a 65536-byte pa
1e20: 67 65 20 73 69 7a 65 2c 20 74 68 65 20 76 61 6c  ge size, the val
1e30: 75 65 20 69 73 0a 61 74 20 6f 66 66 73 65 74 20  ue is.at offset 
1e40: 31 36 20 69 73 20 30 78 30 30 20 30 78 30 31 2e  16 is 0x00 0x01.
1e50: 0a 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e 20  .This value can 
1e60: 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  be interpreted a
1e70: 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 31  s a big-endian.1
1e80: 20 61 6e 64 20 74 68 6f 75 67 68 74 20 6f 66 20   and thought of 
1e90: 69 73 20 61 73 20 61 20 6d 61 67 69 63 20 6e 75  is as a magic nu
1ea0: 6d 62 65 72 20 74 6f 20 72 65 70 72 65 73 65 6e  mber to represen
1eb0: 74 20 74 68 65 20 36 35 35 33 36 20 70 61 67 65  t the 65536 page
1ec0: 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e 65 20 63 61   size..Or one ca
1ed0: 6e 20 76 69 65 77 20 74 68 65 20 74 77 6f 2d 62  n view the two-b
1ee0: 79 74 65 20 66 69 65 6c 64 20 61 73 20 61 20 6c  yte field as a l
1ef0: 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75 6d  ittle endian num
1f00: 62 65 72 20 61 6e 64 20 73 61 79 0a 74 68 61 74  ber and say.that
1f10: 20 69 74 20 72 65 70 72 65 73 65 6e 74 73 20 74   it represents t
1f20: 68 65 20 70 61 67 65 20 73 69 7a 65 20 64 69 76  he page size div
1f30: 69 64 65 64 20 62 79 20 32 35 36 2e 20 20 54 68  ided by 256.  Th
1f40: 65 73 65 20 74 77 6f 20 0a 69 6e 74 65 72 70 72  ese two .interpr
1f50: 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20  etations of the 
1f60: 70 61 67 65 2d 73 69 7a 65 20 66 69 65 6c 64 20  page-size field 
1f70: 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 3c  are equivalent.<
1f80: 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20 46  /p>..<h4>1.2.3 F
1f90: 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69  ile format versi
1fa0: 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e 0a  on numbers</h4>.
1fb0: 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f 72  .<p>The file for
1fc0: 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69 6f  mat write versio
1fd0: 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d 61  n and file forma
1fe0: 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20 61  t read version a
1ff0: 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e 64  t offsets.18 and
2000: 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65 64   19 are intended
2010: 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65 6e   to allow for en
2020: 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74 68  hancements of th
2030: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69 6e  e file format.in
2040: 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73   future versions
2050: 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e 20   of SQLite.  In 
2060: 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 73  current versions
2070: 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74 68   of SQLite, both
2080: 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65 73   of.these values
2090: 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c 62   are 1 for rollb
20a0: 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67 20  ack journalling 
20b0: 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72 20  modes and 2 for 
20c0: 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69 6e  [WAL].journallin
20d0: 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76 65  g mode.  If a ve
20e0: 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  rsion of SQLite 
20f0: 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75 72  coded to the cur
2100: 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61 74  rent.file format
2110: 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 65   specification e
2120: 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74 61  ncounters a data
2130: 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65 20  base file where 
2140: 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f 6e  the read.version
2150: 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20 74   is 1 or 2 but t
2160: 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f 6e  he write version
2170: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2180: 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74   2, then the dat
2190: 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74 20  abase.file must 
21a0: 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72 65  be treated as re
21b0: 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20 64  ad-only.  If a d
21c0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74  atabase file wit
21d0: 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f 6e  h a read version
21e0: 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32 20  .greater than 2 
21f0: 69 73 20 65 6e 63 6f 75 6e 74 65 72 2c 20 74 68  is encounter, th
2200: 65 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65  en that database
2210: 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 61 64 20   cannot be read 
2220: 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f 70 3e 0a  or written.</p>.
2230: 0a 3c 68 34 3e 31 2e 32 2e 34 20 52 65 73 65 72  .<h4>1.2.4 Reser
2240: 76 65 64 20 62 79 74 65 73 20 70 65 72 20 70 61  ved bytes per pa
2250: 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53 51 4c 69  ge</h4>..<p>SQLi
2260: 74 65 20 68 61 73 20 74 68 65 20 61 62 69 6c 69  te has the abili
2270: 74 79 20 74 6f 20 73 65 74 20 61 73 69 64 65 20  ty to set aside 
2280: 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65 72 20 6f  a small number o
2290: 66 20 65 78 74 72 61 20 62 79 74 65 73 20 61 74  f extra bytes at
22a0: 0a 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65 72  .the end of ever
22b0: 79 20 70 61 67 65 20 66 6f 72 20 75 73 65 20 62  y page for use b
22c0: 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e 20 20 54  y extensions.  T
22d0: 68 65 73 65 20 65 78 74 72 61 20 62 79 74 65 73  hese extra bytes
22e0: 20 61 72 65 0a 75 73 65 64 2c 20 66 6f 72 20 65   are.used, for e
22f0: 78 61 6d 70 6c 65 2c 20 62 79 20 74 68 65 20 53  xample, by the S
2300: 51 4c 69 74 65 20 45 6e 63 72 79 70 74 69 6f 6e  QLite Encryption
2310: 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f 20 73 74   Extension to st
2320: 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61 6e 64 2f  ore a nonce.and/
2330: 6f 72 20 63 72 79 70 74 6f 67 72 61 70 68 69 63  or cryptographic
2340: 20 63 68 65 63 6b 73 75 6d 20 61 73 73 6f 63 69   checksum associ
2350: 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20 70  ated with each p
2360: 61 67 65 2e 20 20 5e 54 68 65 20 0a 22 72 65 73  age.  ^The ."res
2370: 65 72 76 65 64 20 73 70 61 63 65 22 20 73 69 7a  erved space" siz
2380: 65 20 69 6e 20 74 68 65 20 31 2d 62 79 74 65 20  e in the 1-byte 
2390: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
23a0: 74 20 32 30 20 69 73 20 74 68 65 20 6e 75 6d 62  t 20 is the numb
23b0: 65 72 0a 6f 66 20 62 79 74 65 73 20 6f 66 20 73  er.of bytes of s
23c0: 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20  pace at the end 
23d0: 6f 66 20 65 61 63 68 20 70 61 67 65 20 74 6f 20  of each page to 
23e0: 72 65 73 65 72 76 65 20 66 6f 72 20 65 78 74 65  reserve for exte
23f0: 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20 76 61 6c  nsions..This val
2400: 75 65 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  ue is usually 0.
2410: 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20    The value can 
2420: 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  be odd.</p>..<tc
2430: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 73  l>hd_fragment us
2440: 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73 61 62 6c  able_size {usabl
2450: 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70  e size}</tcl>.<p
2460: 3e 54 68 65 20 22 75 73 61 62 6c 65 20 73 69 7a  >The "usable siz
2470: 65 22 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  e" of a database
2480: 20 70 61 67 65 20 69 73 20 74 68 65 20 70 61 67   page is the pag
2490: 65 20 73 69 7a 65 20 73 70 65 63 69 66 79 20 62  e size specify b
24a0: 79 20 74 68 65 0a 32 2d 62 79 74 65 20 69 6e 74  y the.2-byte int
24b0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 31  eger at offset 1
24c0: 36 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20  6 in the header 
24d0: 6c 65 73 73 20 74 68 65 20 22 72 65 73 65 72 76  less the "reserv
24e0: 65 64 22 20 73 70 61 63 65 20 73 69 7a 65 0a 72  ed" space size.r
24f0: 65 63 6f 72 64 65 64 20 69 6e 20 74 68 65 20 31  ecorded in the 1
2500: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
2510: 20 6f 66 66 73 65 74 20 32 30 20 69 6e 20 74 68   offset 20 in th
2520: 65 20 68 65 61 64 65 72 2e 20 20 54 68 65 20 75  e header.  The u
2530: 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66 20 61 20  sable.size of a 
2540: 70 61 67 65 20 6d 69 67 68 74 20 62 65 20 61 6e  page might be an
2550: 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20 20 5e 28   odd number.  ^(
2560: 48 6f 77 65 76 65 72 2c 20 74 68 65 20 75 73 61  However, the usa
2570: 62 6c 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 0a  ble size is not.
2580: 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65  allowed to be le
2590: 73 73 20 74 68 61 6e 20 34 38 30 2e 20 20 49 6e  ss than 480.  In
25a0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
25b0: 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 69   the page size i
25c0: 73 20 35 31 32 2c 0a 74 68 65 6e 20 74 68 65 20  s 512,.then the 
25d0: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20 73  reserved space s
25e0: 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78 63 65 65  ize cannot excee
25f0: 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 34  d 32.)^</p>..<h4
2600: 3e 31 2e 32 2e 35 20 50 61 79 6c 6f 61 64 20 66  >1.2.5 Payload f
2610: 72 61 63 74 69 6f 6e 73 3c 2f 68 34 3e 0a 0a 3c  ractions</h4>..<
2620: 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 61  p>^The maximum a
2630: 6e 64 20 6d 69 6e 69 6d 75 6d 20 65 6d 62 65 64  nd minimum embed
2640: 64 65 64 20 70 61 79 6c 6f 61 64 20 66 72 61 63  ded payload frac
2650: 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 6c 65  tions and the le
2660: 61 66 0a 70 61 79 6c 6f 61 64 20 66 72 61 63 74  af.payload fract
2670: 69 6f 6e 20 76 61 6c 75 65 73 20 6d 75 73 74 20  ion values must 
2680: 62 65 20 36 34 2c 20 33 32 2c 20 61 6e 64 20 33  be 64, 32, and 3
2690: 32 2e 20 20 54 68 65 73 65 20 76 61 6c 75 65 73  2.  These values
26a0: 20 77 65 72 65 0a 6f 72 69 67 69 6e 61 6c 6c 79   were.originally
26b0: 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 73 20   intended to as 
26c0: 74 75 6e 61 62 6c 65 20 70 61 72 61 6d 65 74 65  tunable paramete
26d0: 72 73 20 74 68 61 74 20 63 6f 75 6c 64 20 62 65  rs that could be
26e0: 20 75 73 65 64 20 74 6f 0a 6d 6f 64 69 66 79 20   used to.modify 
26f0: 74 68 65 20 73 74 6f 72 61 67 65 20 66 6f 72 6d  the storage form
2700: 61 74 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65  at of the b-tree
2710: 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20 48 6f 77   algorithm.  How
2720: 65 76 65 72 2c 20 74 68 61 74 0a 66 75 6e 63 74  ever, that.funct
2730: 69 6f 6e 61 6c 69 74 79 20 69 73 20 6e 6f 74 20  ionality is not 
2740: 73 75 70 70 6f 72 74 65 64 20 61 6e 64 20 74 68  supported and th
2750: 65 72 65 20 61 72 65 20 6e 6f 20 63 75 72 72 65  ere are no curre
2760: 6e 74 20 70 6c 61 6e 73 20 74 6f 20 61 64 64 0a  nt plans to add.
2770: 73 75 70 70 6f 72 74 20 69 6e 20 74 68 65 20 66  support in the f
2780: 75 74 75 72 65 2e 20 20 48 65 6e 63 65 2c 20 74  uture.  Hence, t
2790: 68 65 73 65 20 74 68 72 65 65 20 62 79 74 65 73  hese three bytes
27a0: 20 61 72 65 20 66 69 78 65 64 20 61 74 20 74 68   are fixed at th
27b0: 65 0a 76 61 6c 75 65 73 20 73 70 65 63 69 66 69  e.values specifi
27c0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  ed.</p>..<h4>1.2
27d0: 2e 36 20 46 69 6c 65 20 63 68 61 6e 67 65 20 63  .6 File change c
27e0: 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a 0a 3c 74 63  ounter</h4>..<tc
27f0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 68  l>hd_fragment ch
2800: 6e 67 63 74 72 20 7b 63 68 61 6e 67 65 20 63 6f  ngctr {change co
2810: 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  unter}</tcl>.<p>
2820: 5e 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65  ^The file change
2830: 20 63 6f 75 6e 74 65 72 20 69 73 20 61 20 34 2d   counter is a 4-
2840: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
2850: 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
2860: 0a 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65  .incremented whe
2870: 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
2880: 73 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f 63  se file is unloc
2890: 6b 65 64 20 61 66 74 65 72 20 68 61 76 69 6e 67  ked after having
28a0: 0a 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e 0a  .been modified..
28b0: 57 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65  When two or more
28c0: 20 70 72 6f 63 65 73 73 65 73 20 61 72 65 20 72   processes are r
28d0: 65 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65 20  eading the same 
28e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 65  database file, e
28f0: 61 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61 6e  ach .process can
2900: 20 64 65 74 65 63 74 20 64 61 74 61 62 61 73 65   detect database
2910: 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74   changes from ot
2920: 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 62 79  her processes by
2930: 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65   monitoring .the
2940: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e   change counter.
2950: 0a 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20  .A process will 
2960: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f  normally want to
2970: 20 66 6c 75 73 68 20 69 74 73 20 64 61 74 61 62   flush its datab
2980: 61 73 65 20 70 61 67 65 20 63 61 63 68 65 20 77  ase page cache w
2990: 68 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63  hen.another proc
29a0: 65 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68 65  ess modified the
29b0: 20 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63 65   database, since
29c0: 20 74 68 65 20 63 61 63 68 65 20 68 61 73 20 62   the cache has b
29d0: 65 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65  ecome stale..The
29e0: 20 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75   file change cou
29f0: 6e 74 65 72 20 66 61 63 69 6c 69 74 61 74 65 73  nter facilitates
2a00: 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49   this.</p>..<p>I
2a10: 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e  n WAL mode, chan
2a20: 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
2a30: 61 73 65 20 61 72 65 20 64 65 74 65 63 74 65 64  ase are detected
2a40: 20 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d 69   using the wal-i
2a50: 6e 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65 20  ndex.and so the 
2a60: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2a70: 73 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 48  s not needed.  H
2a80: 65 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67 65  ence, the change
2a90: 20 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e   counter might.n
2aa0: 6f 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ot be incremente
2ab0: 64 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73 61  d on each transa
2ac0: 63 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64  ction in WAL mod
2ad0: 65 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  e.</p>..<h4>1.2.
2ae0: 37 20 49 6e 2d 68 65 61 64 65 72 20 64 61 74 61  7 In-header data
2af0: 62 61 73 65 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a  base size</h4>..
2b00: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2b10: 20 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d 68 65   filesize {in-he
2b20: 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69  ader database si
2b30: 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68  ze}</tcl>.<p>^Th
2b40: 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  e 4-byte big-end
2b50: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
2b60: 66 66 73 65 74 20 32 38 20 69 6e 74 6f 20 74 68  ffset 28 into th
2b70: 65 20 68 65 61 64 65 72 20 0a 73 74 6f 72 65 73  e header .stores
2b80: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
2b90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2ba0: 6e 20 70 61 67 65 73 2e 20 20 5e 49 66 20 74 68  n pages.  ^If th
2bb0: 69 73 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74  is in-header.dat
2bc0: 61 73 69 7a 65 20 73 69 7a 65 20 69 73 20 6e 6f  asize size is no
2bd0: 74 20 76 61 6c 69 64 20 28 73 65 65 20 74 68 65  t valid (see the
2be0: 20 6e 65 78 74 20 70 61 72 61 67 72 61 70 68 29   next paragraph)
2bf0: 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  , then the datab
2c00: 61 73 65 20 0a 73 69 7a 65 20 69 73 20 63 6f 6d  ase .size is com
2c10: 70 75 74 65 64 20 62 79 20 6c 6f 6f 6b 69 6e 67  puted by looking
2c20: 0a 61 74 20 74 68 65 20 61 63 74 75 61 6c 20 73  .at the actual s
2c30: 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
2c40: 61 73 65 20 66 69 6c 65 2e 20 4f 6c 64 65 72 20  ase file. Older 
2c50: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
2c60: 74 65 0a 69 67 6e 6f 72 65 64 20 74 68 65 20 69  te.ignored the i
2c70: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2c80: 65 20 73 69 7a 65 20 61 6e 64 20 75 73 65 64 20  e size and used 
2c90: 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20  the actual file 
2ca0: 73 69 7a 65 0a 65 78 63 6c 75 73 69 76 65 6c 79  size.exclusively
2cb0: 2e 20 20 5e 4e 65 77 65 72 20 76 65 72 73 69 6f  .  ^Newer versio
2cc0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65  ns of SQLite use
2cd0: 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64   the in-header d
2ce0: 61 74 61 62 61 73 65 0a 73 69 7a 65 20 69 66 20  atabase.size if 
2cf0: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  it is available 
2d00: 62 75 74 20 66 61 6c 6c 20 62 61 63 6b 20 74 6f  but fall back to
2d10: 20 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65   the actual file
2d20: 20 73 69 7a 65 20 69 66 0a 74 68 65 20 69 6e 2d   size if.the in-
2d30: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
2d40: 73 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c 69  size is not vali
2d50: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20  d.</p>..<p>^The 
2d60: 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61  in-header databa
2d70: 73 65 20 73 69 7a 65 20 69 73 20 6f 6e 6c 79 20  se size is only 
2d80: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
2d90: 20 76 61 6c 69 64 20 69 66 0a 69 74 20 69 73 20   valid if.it is 
2da0: 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 69 66 20  non-zero and if 
2db0: 74 68 65 20 34 2d 62 79 74 65 20 5b 63 68 61 6e  the 4-byte [chan
2dc0: 67 65 20 63 6f 75 6e 74 65 72 5d 20 61 74 20 6f  ge counter] at o
2dd0: 66 66 73 65 74 20 32 34 0a 65 78 61 63 74 6c 79  ffset 24.exactly
2de0: 20 6d 61 74 63 68 65 73 20 74 68 65 20 34 2d 62   matches the 4-b
2df0: 79 74 65 20 5b 76 65 72 73 69 6f 6e 2d 76 61 6c  yte [version-val
2e00: 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d 20 61  id-for number] a
2e10: 74 20 6f 66 66 73 65 74 20 39 32 2e 0a 5e 28 54  t offset 92..^(T
2e20: 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74  he in-header dat
2e30: 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 61 6c  abase size is al
2e40: 77 61 79 73 20 76 61 6c 69 64 20 0a 77 68 65 6e  ways valid .when
2e50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
2e60: 20 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64 20 75   only modified u
2e70: 73 69 6e 67 20 72 65 63 65 6e 74 20 76 65 72 73  sing recent vers
2e80: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 28  ions of SQLite.(
2e90: 76 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 20 61  versions 3.7.0 a
2ea0: 6e 64 20 6c 61 74 65 72 29 2e 29 5e 0a 49 66 20  nd later).)^.If 
2eb0: 61 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e  a legacy version
2ec0: 20 6f 66 20 53 51 4c 69 74 65 20 77 72 69 74 65   of SQLite write
2ed0: 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
2ee0: 65 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a 6b  e, it will not.k
2ef0: 6e 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68  now to update th
2f00: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2f10: 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20 73 6f  base size and so
2f20: 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 0a 64   the in-header.d
2f30: 61 74 61 62 61 73 65 20 73 69 7a 65 20 63 6f 75  atabase size cou
2f40: 6c 64 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e  ld be incorrect.
2f50: 20 20 42 75 74 20 6c 65 67 61 63 79 20 76 65 72    But legacy ver
2f60: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a  sions of SQLite.
2f70: 77 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65 20  will also leave 
2f80: 74 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69  the version-vali
2f90: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61 74 20  d-for number at 
2fa0: 6f 66 66 73 65 74 20 39 32 20 75 6e 63 68 61 6e  offset 92 unchan
2fb0: 67 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c 20 6e  ged.so it will n
2fc0: 6f 74 20 6d 61 74 63 68 20 74 68 65 20 63 68 61  ot match the cha
2fd0: 6e 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20 48 65  nge-counter.  He
2fe0: 6e 63 65 2c 20 69 6e 76 61 6c 69 64 20 69 6e 2d  nce, invalid in-
2ff0: 68 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20  header.database 
3000: 73 69 7a 65 73 20 63 61 6e 20 62 65 20 64 65 74  sizes can be det
3010: 65 63 74 65 64 20 28 61 6e 64 20 69 67 6e 6f 72  ected (and ignor
3020: 65 64 29 20 62 79 20 6f 62 73 65 72 76 69 6e 67  ed) by observing
3030: 20 77 68 65 6e 0a 74 68 65 20 63 68 61 6e 67 65   when.the change
3040: 2d 63 6f 75 6e 74 65 72 20 64 6f 65 73 20 6e 6f  -counter does no
3050: 74 20 6d 61 74 63 68 20 74 68 65 20 76 65 72 73  t match the vers
3060: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
3070: 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31  mber.</p>..<h4>1
3080: 2e 32 2e 38 20 46 72 65 65 20 70 61 67 65 20 6c  .2.8 Free page l
3090: 69 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e 75  ist</h4>..<p>Unu
30a0: 73 65 64 20 70 61 67 65 73 20 69 6e 20 74 68 65  sed pages in the
30b0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
30c0: 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 66  re stored on a f
30d0: 72 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a 34  reelist.  ^The.4
30e0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
30f0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3100: 65 74 20 33 32 20 73 74 6f 72 65 73 20 74 68 65  et 32 stores the
3110: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 0a   page number of.
3120: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
3130: 66 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c 20  f the freelist, 
3140: 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66  or zero if the f
3150: 72 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74 79  reelist is empty
3160: 2e 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69  ..^The 4-byte bi
3170: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
3180: 20 61 74 20 6f 66 66 73 65 74 20 33 36 20 73 74   at offset 36 st
3190: 6f 72 65 73 20 73 74 6f 72 65 73 20 74 68 65 20  ores stores the 
31a0: 74 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f 66  total .number of
31b0: 20 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66 72   pages on the fr
31c0: 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 34  eelist.</p>..<h4
31d0: 3e 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 63 6f  >1.2.9 Schema co
31e0: 6f 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  okie</h4>..<p>^T
31f0: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
3200: 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67   is a 4-byte big
3210: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3220: 61 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61  at offset 40.tha
3230: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
3240: 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
3250: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
3260: 61 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61  anges.  A .prepa
3270: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
3280: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73   compiled agains
3290: 74 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72  t a specific ver
32a0: 73 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61  sion of the.data
32b0: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5e 57  base schema.  ^W
32c0: 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
32d0: 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
32e0: 67 65 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65  ges, the stateme
32f0: 6e 74 0a 6d 75 73 74 20 62 65 20 72 65 70 72 65  nt.must be repre
3300: 70 61 72 65 64 2e 20 20 5e 57 68 65 6e 65 76 65  pared.  ^Wheneve
3310: 72 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  r a prepared sta
3320: 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 69 74 20  tement runs, it 
3330: 66 69 72 73 74 20 63 68 65 63 6b 73 0a 74 68 65  first checks.the
3340: 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 74   schema cookie t
3350: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  o make sure the 
3360: 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 61 6d  value is the sam
3370: 65 20 61 73 20 77 68 65 6e 20 74 68 65 20 73 74  e as when the st
3380: 61 74 65 6d 65 6e 74 0a 77 61 73 20 70 72 65 70  atement.was prep
3390: 61 72 65 64 20 61 6e 64 20 69 66 20 74 68 65 20  ared and if the 
33a0: 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 68 61  schema cookie ha
33b0: 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 20 73  s changed, the s
33c0: 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 0a  tatement aborts.
33d0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63  in order to forc
33e0: 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  e the statement 
33f0: 74 6f 20 62 65 20 72 65 70 72 65 70 61 72 65 64  to be reprepared
3400: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
3410: 72 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d 61 66  ragment {schemaf
3420: 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61 20 66  ormat} {schema f
3430: 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c 2f 74  ormat number}</t
3440: 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 30 20 53  cl>.<h4>1.2.10 S
3450: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d  chema format num
3460: 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  ber</h4>..<p>The
3470: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   schema format n
3480: 75 6d 62 65 72 20 69 73 20 61 20 34 2d 62 79 74  umber is a 4-byt
3490: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
34a0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34  eger at offset 4
34b0: 34 2e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  4..The schema fo
34c0: 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73 20 73  rmat number is s
34d0: 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 66 69  imilar to the fi
34e0: 6c 65 20 66 6f 72 6d 61 74 20 72 65 61 64 20 61  le format read a
34f0: 6e 64 20 77 72 69 74 65 0a 76 65 72 73 69 6f 6e  nd write.version
3500: 20 6e 75 6d 62 65 72 73 20 61 74 20 6f 66 66 73   numbers at offs
3510: 65 74 73 20 31 38 20 61 6e 64 20 31 39 20 65 78  ets 18 and 19 ex
3520: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 73 63  cept that the sc
3530: 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62  hema format numb
3540: 65 72 0a 72 65 66 65 72 73 20 74 6f 20 74 68 65  er.refers to the
3550: 20 68 69 67 68 2d 6c 65 76 65 6c 20 53 51 4c 20   high-level SQL 
3560: 66 6f 72 6d 61 74 74 69 6e 67 20 72 61 74 68 65  formatting rathe
3570: 72 20 74 68 61 6e 20 74 68 65 20 6c 6f 77 2d 6c  r than the low-l
3580: 65 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f 72 6d  evel b-tree.form
3590: 61 74 74 69 6e 67 2e 20 20 46 6f 75 72 20 73 63  atting.  Four sc
35a0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62  hema format numb
35b0: 65 72 73 20 61 72 65 20 63 75 72 72 65 6e 74 6c  ers are currentl
35c0: 79 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e 0a 0a  y defined:</p>..
35d0: 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 31  <ol>.<li value=1
35e0: 3e 46 6f 72 6d 61 74 20 31 20 69 73 20 75 6e 64  >Format 1 is und
35f0: 65 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c 20 76  erstood by all v
3600: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
3610: 65 20 62 61 63 6b 20 74 6f 0a 76 65 72 73 69 6f  e back to.versio
3620: 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e 0a 3c 6c  n 3.0.0.</li>.<l
3630: 69 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d 61 74  i value=2>Format
3640: 20 32 20 61 64 64 73 20 74 68 65 20 61 62 69 6c   2 adds the abil
3650: 69 74 79 20 6f 66 20 72 6f 77 73 20 77 69 74 68  ity of rows with
3660: 69 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  in the same tabl
3670: 65 0a 74 6f 20 68 61 76 65 20 61 20 76 61 72 79  e.to have a vary
3680: 69 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  ing number of co
3690: 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65 72 20  lumns, in order 
36a0: 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 0a 5b  to support the.[
36b0: 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c  ALTER TABLE | AL
36c0: 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44  TER TABLE ... AD
36d0: 44 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63 74 69  D COLUMN] functi
36e0: 6f 6e 61 6c 69 74 79 2e 20 20 53 75 70 70 6f 72  onality.  Suppor
36f0: 74 20 66 6f 72 0a 72 65 61 64 69 6e 67 20 61 6e  t for.reading an
3700: 64 20 77 72 69 74 69 6e 67 20 66 6f 72 6d 61 74  d writing format
3710: 20 32 20 77 61 73 20 61 64 64 65 64 20 69 6e 20   2 was added in 
3720: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
3730: 2e 31 2e 33 20 0a 6f 6e 20 32 30 30 35 2d 30 32  .1.3 .on 2005-02
3740: 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61  -19.</li>.<li va
3750: 6c 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33 20 61  lue=3>Format 3 a
3760: 64 64 73 20 74 68 65 20 61 62 69 6c 69 74 79 20  dds the ability 
3770: 6f 66 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73  of extra columns
3780: 20 61 64 64 65 64 20 62 79 0a 5b 41 4c 54 45 52   added by.[ALTER
3790: 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54   TABLE | ALTER T
37a0: 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c  ABLE ... ADD COL
37b0: 55 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e 6f 6e  UMN] to have non
37c0: 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a 76 61  -NULL default.va
37d0: 6c 75 65 73 2e 20 20 54 68 69 73 20 63 61 70 61  lues.  This capa
37e0: 62 69 6c 69 74 79 20 77 61 73 20 61 64 64 65 64  bility was added
37f0: 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69   in SQLite versi
3800: 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e 20 32 30 30  on 3.1.4 .on 200
3810: 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69 3e 0a 3c 6c  5-03-11.</li>.<l
3820: 69 20 76 61 6c 75 65 3d 34 3e 5e 46 6f 72 6d 61  i value=4>^Forma
3830: 74 20 34 20 63 61 75 73 65 73 20 53 51 4c 69 74  t 4 causes SQLit
3840: 65 20 74 6f 20 72 65 73 70 65 63 74 20 74 68 65  e to respect the
3850: 0a 5b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64  .[descending ind
3860: 69 63 65 73 20 7c 20 44 45 53 43 20 6b 65 79 77  ices | DESC keyw
3870: 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65 78 20 64 65  ord] on.index de
3880: 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20 28 5e 54  clarations.  (^T
3890: 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72 64 20  he DESC keyword 
38a0: 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20 69 6e  is ignored in in
38b0: 64 69 63 65 73 20 66 6f 72 20 0a 66 6f 72 6d 61  dices for .forma
38c0: 74 73 20 31 2c 20 32 2c 20 61 6e 64 20 33 2e 29  ts 1, 2, and 3.)
38d0: 0a 5e 46 6f 72 6d 61 74 20 34 20 61 6c 73 6f 20  .^Format 4 also 
38e0: 61 64 64 73 20 74 77 6f 20 6e 65 77 20 62 6f 6f  adds two new boo
38f0: 6c 65 61 6e 20 72 65 63 6f 72 64 20 74 79 70 65  lean record type
3900: 20 76 61 6c 75 65 73 20 28 5b 73 65 72 69 61 6c   values ([serial
3910: 20 74 79 70 65 73 5d 0a 38 20 61 6e 64 20 39 2e   types].8 and 9.
3920: 29 20 20 53 75 70 70 6f 72 74 20 66 6f 72 20 66  )  Support for f
3930: 6f 72 6d 61 74 20 34 20 77 61 73 20 61 64 64 65  ormat 4 was adde
3940: 64 20 69 6e 20 53 51 4c 69 74 65 20 33 2e 33 2e  d in SQLite 3.3.
3950: 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31 30 2e  0 on.2006-01-10.
3960: 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
3970: 5e 4e 65 77 20 64 61 74 61 62 61 73 65 20 66 69  ^New database fi
3980: 6c 65 73 20 63 72 65 61 74 65 64 20 62 79 20 53  les created by S
3990: 51 4c 69 74 65 20 75 73 65 20 66 6f 72 6d 61 74  QLite use format
39a0: 20 34 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 5e   4 by default..^
39b0: 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65  The [legacy_file
39c0: 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20  _format pragma] 
39d0: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63  can be used to c
39e0: 61 75 73 65 20 53 51 4c 69 74 65 0a 74 6f 20 63  ause SQLite.to c
39f0: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
3a00: 73 65 20 66 69 6c 65 73 20 75 73 69 6e 67 20 66  se files using f
3a10: 6f 72 6d 61 74 20 31 2e 0a 54 68 65 20 66 6f 72  ormat 1..The for
3a20: 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  mat version numb
3a30: 65 72 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  er can be made t
3a40: 6f 20 64 65 66 61 75 6c 74 20 74 6f 20 31 20 69  o default to 1 i
3a50: 6e 73 74 65 61 64 20 6f 66 20 34 20 62 79 0a 73  nstead of 4 by.s
3a60: 65 74 74 69 6e 67 20 5b 53 51 4c 49 54 45 5f 44  etting [SQLITE_D
3a70: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
3a80: 41 54 5d 3d 31 20 61 74 20 63 6f 6d 70 69 6c 65  AT]=1 at compile
3a90: 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 34  -time..</p>..<h4
3aa0: 3e 31 2e 32 2e 31 31 20 53 75 67 67 65 73 74 65  >1.2.11 Suggeste
3ab0: 64 20 63 61 63 68 65 20 73 69 7a 65 3c 2f 68 34  d cache size</h4
3ac0: 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74 65  >..<p>The 4-byte
3ad0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 69 67 6e   big-endian sign
3ae0: 65 64 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  ed integer at of
3af0: 66 73 65 74 20 34 38 20 69 73 20 74 68 65 20 73  fset 48 is the s
3b00: 75 67 67 65 73 74 65 64 0a 63 61 63 68 65 20 73  uggested.cache s
3b10: 69 7a 65 20 69 6e 20 70 61 67 65 73 20 66 6f 72  ize in pages for
3b20: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3b30: 6c 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  le.  The value i
3b40: 73 20 61 20 73 75 67 67 65 73 74 69 6f 6e 0a 6f  s a suggestion.o
3b50: 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74 65 20 69  nly and SQLite i
3b60: 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c 69 67  s under no oblig
3b70: 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72 20 69  ation to honor i
3b80: 74 2e 20 20 54 68 65 20 61 62 73 6f 6c 75 74 65  t.  The absolute
3b90: 20 76 61 6c 75 65 0a 6f 66 20 74 68 65 20 69 6e   value.of the in
3ba0: 74 65 67 65 72 20 69 73 20 75 73 65 64 20 61 73  teger is used as
3bb0: 20 74 68 65 20 73 75 67 67 65 73 74 65 64 20 73   the suggested s
3bc0: 69 7a 65 2e 20 20 54 68 65 20 73 75 67 67 65 73  ize.  The sugges
3bd0: 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 0a 63  ted cache size.c
3be0: 61 6e 20 62 65 20 73 65 74 20 75 73 69 6e 67 20  an be set using 
3bf0: 74 68 65 20 5b 64 65 66 61 75 6c 74 5f 63 61 63  the [default_cac
3c00: 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 5d 2e  he_size pragma].
3c10: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 32  </p>..<h4>1.2.12
3c20: 20 49 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   Incremental vac
3c30: 75 75 6d 20 73 65 74 74 69 6e 67 73 3c 2f 68 34  uum settings</h4
3c40: 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 20 34 2d  >..<p>The two 4-
3c50: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3c60: 69 6e 74 65 67 65 72 73 20 61 74 20 6f 66 66 73  integers at offs
3c70: 65 74 73 20 35 32 20 61 6e 64 20 36 34 20 61 72  ets 52 and 64 ar
3c80: 65 20 75 73 65 64 0a 74 6f 20 6d 61 6e 61 67 65  e used.to manage
3c90: 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75   the [auto_vacuu
3ca0: 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e  m] and [incremen
3cb0: 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65  tal_vacuum] mode
3cc0: 73 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e 74 65  s.  ^If.the inte
3cd0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 32  ger at offset 52
3ce0: 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 20 70 6f   is zero then po
3cf0: 69 6e 74 65 72 2d 6d 61 70 20 28 70 74 72 6d 61  inter-map (ptrma
3d00: 70 29 20 70 61 67 65 73 20 61 72 65 0a 6f 6d 69  p) pages are.omi
3d10: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61  tted from the da
3d20: 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
3d30: 6e 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61 63  neither auto_vac
3d40: 75 75 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d 65 6e  uum nor.incremen
3d50: 74 61 6c 5f 76 61 63 75 75 6d 20 61 72 65 20 73  tal_vacuum are s
3d60: 75 70 70 6f 72 74 65 64 2e 20 20 5e 49 66 20 74  upported.  ^If t
3d70: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
3d80: 66 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e 2d 7a  fset 52 is.non-z
3d90: 65 72 6f 20 74 68 65 6e 20 69 74 20 69 73 20 74  ero then it is t
3da0: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  he page number o
3db0: 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 72 6f  f the largest ro
3dc0: 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 0a 64  ot page in the.d
3dd0: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68  atabase file, th
3de0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
3df0: 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 70 74 72  will contain ptr
3e00: 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64 20 74  map pages, and t
3e10: 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62 65 20  he.mode must be 
3e20: 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61 63 75  either auto_vacu
3e30: 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61  um or incrementa
3e40: 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e 20 74  l_vacuum.  ^In t
3e50: 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73 65 2c  his latter.case,
3e60: 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
3e70: 6f 66 66 73 65 74 20 36 34 20 69 73 20 74 72 75  offset 64 is tru
3e80: 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61  e for incrementa
3e90: 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66 61 6c  l_vacuum and.fal
3ea0: 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61 63 75  se for auto_vacu
3eb0: 75 6d 2e 20 20 5e 49 66 20 74 68 65 20 69 6e 74  um.  ^If the int
3ec0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35  eger at offset 5
3ed0: 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 0a 74  2 is zero then.t
3ee0: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
3ef0: 66 73 65 74 20 36 34 20 6d 75 73 74 20 61 6c 73  fset 64 must als
3f00: 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a  o be zero.</p>..
3f10: 3c 68 34 3e 31 2e 32 2e 31 33 20 54 65 78 74 20  <h4>1.2.13 Text 
3f20: 65 6e 63 6f 64 69 6e 67 3c 2f 68 34 3e 0a 0a 3c  encoding</h4>..<
3f30: 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69  p>^The 4-byte bi
3f40: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
3f50: 20 61 74 20 6f 66 66 73 65 74 20 35 36 20 64 65   at offset 56 de
3f60: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 65 6e 63  termines the enc
3f70: 6f 64 69 6e 67 0a 75 73 65 64 20 66 6f 72 20 61  oding.used for a
3f80: 6c 6c 20 74 65 78 74 20 73 74 72 69 6e 67 73 20  ll text strings 
3f90: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
3fa0: 74 61 62 61 73 65 2e 20 20 5e 41 20 76 61 6c 75  tabase.  ^A valu
3fb0: 65 20 6f 66 20 31 20 6d 65 61 6e 73 0a 55 54 46  e of 1 means.UTF
3fc0: 2d 38 2e 20 20 5e 41 20 76 61 6c 75 65 20 6f 66  -8.  ^A value of
3fd0: 20 32 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c   2 means UTF-16l
3fe0: 65 2e 20 20 5e 41 20 76 61 6c 75 65 20 6f 66 20  e.  ^A value of 
3ff0: 33 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 62 65  3 means UTF-16be
4000: 2e 0a 4e 6f 20 6f 74 68 65 72 20 76 61 6c 75 65  ..No other value
4010: 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 3c 2f  s are allowed.</
4020: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 34 20 55  p>..<h4>1.2.14 U
4030: 73 65 72 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ser version numb
4040: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h4>..<p>^The
4050: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4060: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4070: 66 73 65 74 20 36 30 20 69 73 20 74 68 65 20 75  fset 60 is the u
4080: 73 65 72 20 76 65 72 73 69 6f 6e 20 77 68 69 63  ser version whic
4090: 68 0a 69 73 20 73 65 74 20 61 6e 64 20 71 75 65  h.is set and que
40a0: 72 69 65 64 20 62 79 20 74 68 65 20 5b 75 73 65  ried by the [use
40b0: 72 5f 76 65 72 73 69 6f 6e 20 70 72 61 67 6d 61  r_version pragma
40c0: 5d 2e 20 20 54 68 65 20 75 73 65 72 20 76 65 72  ].  The user ver
40d0: 73 69 6f 6e 20 69 73 0a 6e 6f 74 20 75 73 65 64  sion is.not used
40e0: 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a   by SQLite.</p>.
40f0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
4100: 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65 72 73  t validfor {vers
4110: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
4120: 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  mber}</tcl>.<h4>
4130: 31 2e 32 2e 31 35 20 57 72 69 74 65 20 6c 69 62  1.2.15 Write lib
4140: 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e 75 6d  rary version num
4150: 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f 6e 2d  ber and version-
4160: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
4170: 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34  </h4>..<p>^The 4
4180: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
4190: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
41a0: 65 74 20 39 36 20 73 74 6f 72 65 73 20 74 68 65  et 96 stores the
41b0: 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f   .[SQLITE_VERSIO
41c0: 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75 65 20  N_NUMBER] value 
41d0: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
41e0: 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f 73 74  ibrary that most
41f0: 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69 66 69  .recently modifi
4200: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
4210: 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d 62 79  file.  ^The 4-by
4220: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
4230: 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74 20  teger at.offset 
4240: 39 32 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  92 is the value 
4250: 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65 20 63  of the [change c
4260: 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74 68 65  ounter] when the
4270: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 0a   version number.
4280: 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54 68 65  was stored.  The
4290: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
42a0: 65 74 20 39 32 20 69 6e 64 69 63 61 74 65 73 20  et 92 indicates 
42b0: 77 68 69 63 68 20 74 72 61 6e 73 61 63 74 69 6f  which transactio
42c0: 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75  n.the version nu
42d0: 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20 66 6f  mber is valid fo
42e0: 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74 69 6d  r and is sometim
42f0: 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a 22 76  es called the."v
4300: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
4310: 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34 3e 31   number"...<h4>1
4320: 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73 70 61  .2.16 Header spa
4330: 63 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 20  ce reserved for 
4340: 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e 0a 0a  expansion</h4>..
4350: 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62 79 74  <p>All other byt
4360: 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  es of the databa
4370: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 61  se file header a
4380: 72 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 0a  re reserved for.
4390: 66 75 74 75 72 65 20 65 78 70 61 6e 73 69 6f 6e  future expansion
43a0: 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73 65 74   and must be set
43b0: 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c   to zero.</p>..<
43c0: 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63 6b 2d  h3>1.3 The Lock-
43d0: 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e 0a 0a  Byte Page</h3>..
43e0: 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65  <p>The lock-byte
43f0: 20 70 61 67 65 20 69 73 20 74 68 65 20 73 69 6e   page is the sin
4400: 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65 20  gle page of the 
4410: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 74 68  database file.th
4420: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
4430: 62 79 74 65 73 20 61 74 20 6f 66 66 73 65 74 73  bytes at offsets
4440: 20 62 65 74 77 65 65 6e 20 31 30 37 33 37 34 31   between 1073741
4450: 38 32 34 20 61 6e 64 20 31 30 37 33 37 34 32 33  824 and 10737423
4460: 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e 20 20  35,.inclusive.  
4470: 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  A database file 
4480: 74 68 61 74 20 69 73 20 6c 65 73 73 20 74 68 61  that is less tha
4490: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 31 30  n or equal to 10
44a0: 37 33 37 34 31 38 32 34 20 62 79 74 65 73 20 0a  73741824 bytes .
44b0: 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69 6e 73  in size contains
44c0: 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61   no lock-byte pa
44d0: 67 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20  ge.  A database 
44e0: 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61 6e  file larger than
44f0: 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f 6e 74  .1073741824 cont
4500: 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65  ains exactly one
4510: 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2e   lock-byte page.
4520: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f  .</p>..<p>The lo
4530: 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73 20  ck-byte page is 
4540: 73 65 74 20 61 73 69 64 65 20 66 6f 72 20 75 73  set aside for us
4550: 65 20 62 79 20 74 68 65 20 6f 70 65 72 61 74 69  e by the operati
4560: 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69 66  ng-system specif
4570: 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65  ic.[VFS] impleme
4580: 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70 6c 65  ntation in imple
4590: 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61 74 61  menting the data
45a0: 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b 69 6e  base file lockin
45b0: 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a 5e 53  g primitives..^S
45c0: 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 75  QLite does not u
45d0: 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  se the lock-byte
45e0: 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53 51 4c   page.  ^The SQL
45f0: 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c 20 6e  ite core .will n
4600: 65 76 65 72 20 72 65 61 64 20 6f 72 20 77 72 69  ever read or wri
4610: 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  te the lock-byte
4620: 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20 6f 70   page,.though op
4630: 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73  erating-system s
4640: 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20 0a 69  pecific [VFS] .i
4650: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d  mplementations m
4660: 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72 65 61  ay choose to rea
4670: 64 20 6f 72 20 77 72 69 74 65 20 62 79 74 65 73  d or write bytes
4680: 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74   on the lock-byt
4690: 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64 69 6e  e .page accordin
46a0: 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73 20  g to the .needs 
46b0: 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69 65 73  and proclivities
46c0: 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   of the underlyi
46d0: 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65 20  ng system.  The 
46e0: 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a 5b  unix and win32.[
46f0: 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61 74  VFS] implementat
4700: 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65 20 62  ions that come b
4710: 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74 65  uilt into SQLite
4720: 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 74 6f   do not write to
4730: 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20 70   the.lock-byte p
4740: 61 67 65 2c 20 62 75 74 20 74 68 69 72 64 2d 70  age, but third-p
4750: 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65 6d 65  arty VFS impleme
4760: 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74 68  ntations for.oth
4770: 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73  er operating sys
4780: 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70 3e 0a  tems might.</p>.
4790: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
47a0: 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72  t {freelist} {fr
47b0: 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70 61  eelist} {free-pa
47c0: 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c  ge list}</tcl>.<
47d0: 68 33 3e 31 2e 34 20 54 68 65 20 46 72 65 65 6c  h3>1.4 The Freel
47e0: 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 64  ist</h3>..<p>A d
47f0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67  atabase file mig
4800: 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65 20 6f  ht contain one o
4810: 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74 68 61  r more pages tha
4820: 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61 63 74  t are not in.act
4830: 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73 65 64  ive use.  Unused
4840: 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d 65 20   pages can come 
4850: 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61 6d 70  about, for examp
4860: 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72 6d 61  le, when informa
4870: 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65 64 20  tion.is deleted 
4880: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
4890: 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65 73  e.  Unused pages
48a0: 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74   are stored on t
48b0: 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e 64 20  he freelist.and 
48c0: 61 72 65 20 72 65 75 73 65 64 20 77 68 65 6e 20  are reused when 
48d0: 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67 65 73  additional pages
48e0: 20 61 72 65 20 72 65 71 75 69 72 65 64 2e 3c 2f   are required.</
48f0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65 65 6c  p>..<p>The freel
4900: 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a 65 64  ist is organized
4910: 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   as a linked lis
4920: 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20 74 72  t of freelist tr
4930: 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68 20 65  unk pages.with e
4940: 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65 73 20  ach trunk pages 
4950: 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67 65 20  containing page 
4960: 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65 72 6f  numbers for zero
4970: 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c 69 73   or more freelis
4980: 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70  t.leaf pages.</p
4990: 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69 73 74  >..<p>A freelist
49a0: 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f 6e 73   trunk page cons
49b0: 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79  ists of an array
49c0: 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67 2d 65   of 4-byte big-e
49d0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 2e 0a  ndian integers..
49e0: 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  The size of the 
49f0: 61 72 72 61 79 20 69 73 20 61 73 20 6d 61 6e 79  array is as many
4a00: 20 69 6e 74 65 67 65 72 73 20 61 73 20 77 69 6c   integers as wil
4a10: 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75 73 61  l fit in the usa
4a20: 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61 20 70  ble space.of a p
4a30: 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75  age.  The minimu
4a40: 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 69  m usable space i
4a50: 73 20 34 38 30 20 62 79 74 65 73 20 73 6f 20 74  s 480 bytes so t
4a60: 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20 61 6c  he array will al
4a70: 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61 73 74  ways.be at least
4a80: 20 31 32 30 20 65 6e 74 72 69 65 73 20 69 6e 20   120 entries in 
4a90: 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20 66 69  length.  ^The fi
4aa0: 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74  rst integer in t
4ab0: 68 65 20 61 72 72 61 79 20 0a 69 73 20 74 68 65  he array .is the
4ac0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
4ad0: 74 68 65 20 6e 65 78 74 20 66 72 65 65 6c 69 73  the next freelis
4ae0: 74 20 74 72 75 6e 6b 20 70 61 67 65 20 69 6e 20  t trunk page in 
4af0: 74 68 65 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f  the list or zero
4b00: 20 0a 69 66 20 74 68 69 73 20 69 73 20 74 68 65   .if this is the
4b10: 20 6c 61 73 74 20 66 72 65 65 6c 69 73 74 20 74   last freelist t
4b20: 72 75 6e 6b 20 70 61 67 65 2e 20 20 5e 54 68 65  runk page.  ^The
4b30: 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20   second integer 
4b40: 69 6e 20 74 68 65 20 61 72 72 61 79 0a 69 73 20  in the array.is 
4b50: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65  the number of le
4b60: 61 66 20 70 61 67 65 20 70 6f 69 6e 74 65 72 73  af page pointers
4b70: 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 43 61 6c   to follow.  Cal
4b80: 6c 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 74  l the second int
4b90: 65 67 65 72 20 4c 2e 0a 5e 49 66 20 4c 20 69 73  eger L..^If L is
4ba0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
4bb0: 72 6f 20 74 68 65 6e 20 69 6e 74 65 67 65 72 73  ro then integers
4bc0: 20 77 69 74 68 20 61 72 72 61 79 20 69 6e 64 65   with array inde
4bd0: 78 65 73 20 62 65 74 77 65 65 6e 20 32 20 61 6e  xes between 2 an
4be0: 64 0a 4c 2b 31 20 69 6e 63 6c 75 73 69 76 65 20  d.L+1 inclusive 
4bf0: 63 6f 6e 74 61 69 6e 20 70 61 67 65 20 6e 75 6d  contain page num
4c00: 62 65 72 73 20 66 6f 72 20 66 72 65 65 6c 69 73  bers for freelis
4c10: 74 20 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70  t leaf pages.</p
4c20: 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c  >..<p>Freelist l
4c30: 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69  eaf pages contai
4c40: 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  n no information
4c50: 2e 20 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64  .  ^SQLite avoid
4c60: 73 20 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69  s reading or.wri
4c70: 74 69 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65  ting freelist le
4c80: 61 66 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65  af pages in orde
4c90: 72 20 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b  r to reduce disk
4ca0: 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20   I/O.</p>..<p>A 
4cb0: 62 75 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65  bug in SQLite ve
4cc0: 72 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20  rsions prior to 
4cd0: 33 2e 36 2e 30 20 63 61 75 73 65 64 20 74 68 65  3.6.0 caused the
4ce0: 20 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a   database to be.
4cf0: 72 65 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72  reported as corr
4d00: 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
4d10: 65 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73  e last 6 entries
4d20: 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74   in the freelist
4d30: 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72   trunk page .arr
4d40: 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e  ay contained non
4d50: 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e  -zero values.  N
4d60: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
4d70: 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68   SQLite do not h
4d80: 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d  ave.this problem
4d90: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77  .  ^However, new
4da0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
4db0: 51 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69  QLite still avoi
4dc0: 64 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73  d using the .las
4dd0: 74 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e  t six entries in
4de0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72   the freelist tr
4df0: 75 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69  unk page array i
4e00: 6e 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74  n order that dat
4e10: 61 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61  abase.files crea
4e20: 74 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72  ted by newer ver
4e30: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
4e40: 63 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f  can be read by o
4e50: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66  lder versions.of
4e60: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
4e70: 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  >^The number of 
4e80: 66 72 65 65 6c 69 73 74 20 70 61 67 65 73 20 69  freelist pages i
4e90: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d  s stored as a 4-
4ea0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
4eb0: 69 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64  integer.in the d
4ec0: 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 61  atabase header a
4ed0: 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33  t an offset of 3
4ee0: 36 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  6 from the begin
4ef0: 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65  ning of the file
4f00: 2e 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 20  ..^The database 
4f10: 68 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72  header also stor
4f20: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
4f30: 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  er of the first 
4f40: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70  freelist trunk.p
4f50: 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20  age as a 4-byte 
4f60: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
4f70: 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  er at an offset 
4f80: 6f 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62  of 32 from the b
4f90: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
4fa0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31  file.</p>..<h3>1
4fb0: 2e 35 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c  .5 B-tree Pages<
4fc0: 2f 68 33 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  /h3>..<p>A b-tre
4fd0: 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72  e page is either
4fe0: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67   an interior pag
4ff0: 65 20 6f 72 20 61 20 6c 65 61 66 20 70 61 67 65  e or a leaf page
5000: 2e 0a 41 20 6c 65 61 66 20 70 61 67 65 20 63 6f  ..A leaf page co
5010: 6e 74 61 69 6e 73 20 6b 65 79 73 20 61 6e 64 20  ntains keys and 
5020: 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
5030: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 65 61   table b-tree ea
5040: 63 68 0a 6b 65 79 20 68 61 73 20 61 73 73 6f 63  ch.key has assoc
5050: 69 61 74 65 64 20 63 6f 6e 74 65 6e 74 2e 20 20  iated content.  
5060: 41 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  An interior page
5070: 20 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b 65 79 73   contains.K keys
5080: 20 77 69 74 68 6f 75 74 20 63 6f 6e 74 65 6e 74   without content
5090: 20 62 75 74 20 77 69 74 68 20 4b 2b 31 20 70 6f   but with K+1 po
50a0: 69 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20  inters to child 
50b0: 62 2d 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20  b-tree pages..A 
50c0: 22 70 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20  "pointer" in an 
50d0: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
50e0: 70 61 67 65 20 69 73 20 6a 75 73 74 20 74 68 65  page is just the
50f0: 20 33 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   31-bit integer.
5100: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
5110: 68 65 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f  he child page.</
5120: 70 3e 0a 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74  p>...<p>Define t
5130: 68 65 20 64 65 70 74 68 0a 6f 66 20 61 20 6c 65  he depth.of a le
5140: 61 66 20 62 2d 74 72 65 65 20 74 6f 20 62 65 20  af b-tree to be 
5150: 31 20 61 6e 64 20 74 68 65 20 64 65 70 74 68 20  1 and the depth 
5160: 6f 66 20 61 6e 79 20 69 6e 74 65 72 69 6f 72 20  of any interior 
5170: 62 2d 74 72 65 65 20 74 6f 20 62 65 20 6f 6e 65  b-tree to be one
5180: 0a 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6d  .more than the m
5190: 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
51a0: 61 6e 79 20 6f 66 20 69 74 73 20 63 68 69 6c 64  any of its child
51b0: 72 65 6e 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c  ren.  ^In a well
51c0: 2d 66 6f 72 6d 65 64 0a 64 61 74 61 62 61 73 65  -formed.database
51d0: 2c 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f  , all children o
51e0: 66 20 61 6e 79 20 6f 6e 65 20 69 6e 74 65 72 69  f any one interi
51f0: 6f 72 20 62 2d 74 72 65 65 20 68 61 76 65 20 74  or b-tree have t
5200: 68 65 20 73 61 6d 65 20 64 65 70 74 68 2e 3c 2f  he same depth.</
5210: 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e 74  p>..<p>In an int
5220: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
5230: 65 2c 20 74 68 65 20 70 6f 69 6e 74 65 72 73 20  e, the pointers 
5240: 61 6e 64 20 6b 65 79 73 20 6c 6f 67 69 63 61 6c  and keys logical
5250: 6c 79 20 61 6c 74 65 72 6e 61 74 65 20 0a 77 69  ly alternate .wi
5260: 74 68 20 61 20 70 6f 69 6e 74 65 72 20 6f 6e 20  th a pointer on 
5270: 62 6f 74 68 20 65 6e 64 73 2e 20 28 54 68 65 20  both ends. (The 
5280: 70 72 65 76 69 6f 75 73 20 73 65 6e 74 65 6e 63  previous sentenc
5290: 65 20 69 73 20 74 6f 20 62 65 20 75 6e 64 65 72  e is to be under
52a0: 73 74 6f 6f 64 0a 63 6f 6e 63 65 70 74 75 61 6c  stood.conceptual
52b0: 6c 79 20 2d 20 74 68 65 20 61 63 74 75 61 6c 20  ly - the actual 
52c0: 6c 61 79 6f 75 74 20 6f 66 20 74 68 65 20 6b 65  layout of the ke
52d0: 79 73 20 61 6e 64 0a 70 6f 69 6e 74 65 72 73 20  ys and.pointers 
52e0: 77 69 74 68 69 6e 20 74 68 65 20 70 61 67 65 20  within the page 
52f0: 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
5300: 74 65 64 20 61 6e 64 20 77 69 6c 6c 20 62 65 20  ted and will be 
5310: 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65  described in.the
5320: 20 73 65 71 75 65 6c 2e 29 20 20 41 6c 6c 20 6b   sequel.)  All k
5330: 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  eys within the s
5340: 61 6d 65 20 70 61 67 65 20 61 72 65 20 75 6e 69  ame page are uni
5350: 71 75 65 20 61 6e 64 20 61 72 65 20 6c 6f 67 69  que and are logi
5360: 63 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a 65 64 20  cally.organized 
5370: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
5380: 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  er from left to 
5390: 72 69 67 68 74 2e 20 20 28 41 67 61 69 6e 2c 20  right.  (Again, 
53a0: 74 68 69 73 20 6f 72 64 65 72 69 6e 67 0a 69 73  this ordering.is
53b0: 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74 20 70 68   logical, not ph
53c0: 79 73 69 63 61 6c 2e 20 20 54 68 65 20 61 63 74  ysical.  The act
53d0: 75 61 6c 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  ual location of 
53e0: 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20  keys within the 
53f0: 70 61 67 65 0a 69 73 20 61 72 62 69 74 72 61 72  page.is arbitrar
5400: 79 2e 29 20 5e 46 6f 72 20 61 6e 79 20 6b 65 79  y.) ^For any key
5410: 20 58 2c 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   X, pointers to 
5420: 74 68 65 20 6c 65 66 74 0a 6f 66 20 61 20 58 20  the left.of a X 
5430: 72 65 66 65 72 20 74 6f 20 62 2d 74 72 65 65 20  refer to b-tree 
5440: 70 61 67 65 73 20 6f 6e 20 77 68 69 63 68 20 61  pages on which a
5450: 6c 6c 20 6b 65 79 73 20 61 72 65 20 6c 65 73 73  ll keys are less
5460: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
5470: 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65 72 73 20 74  o X..^Pointers t
5480: 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 58  o the right of X
5490: 20 72 65 66 65 72 20 74 6f 20 70 61 67 65 73 20   refer to pages 
54a0: 77 68 65 72 65 20 61 6c 6c 20 6b 65 79 73 20 61  where all keys a
54b0: 72 65 20 0a 67 72 65 61 74 65 72 20 74 68 61 6e  re .greater than
54c0: 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68   X.</p>..<p>With
54d0: 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62  in an interior b
54e0: 2d 74 72 65 65 20 70 61 67 65 2c 20 65 61 63 68  -tree page, each
54f0: 20 6b 65 79 20 61 6e 64 20 74 68 65 20 70 6f 69   key and the poi
5500: 6e 74 65 72 20 74 6f 20 69 74 73 0a 69 6d 6d 65  nter to its.imme
5510: 64 69 61 74 65 20 6c 65 66 74 20 61 72 65 20 63  diate left are c
5520: 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73  ombined into a s
5530: 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20  tructure called 
5540: 61 20 22 63 65 6c 6c 22 2e 20 20 54 68 65 0a 72  a "cell".  The.r
5550: 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65  ight-most pointe
5560: 72 20 69 73 20 68 65 6c 64 20 73 65 70 61 72 61  r is held separa
5570: 74 65 6c 79 2e 20 20 41 20 6c 65 61 66 20 62 2d  tely.  A leaf b-
5580: 74 72 65 65 20 70 61 67 65 20 68 61 73 20 6e 6f  tree page has no
5590: 0a 70 6f 69 6e 74 65 72 73 2c 20 62 75 74 20 69  .pointers, but i
55a0: 74 20 73 74 69 6c 6c 20 75 73 65 73 20 74 68 65  t still uses the
55b0: 20 63 65 6c 6c 20 73 74 72 75 63 74 75 72 65 20   cell structure 
55c0: 74 6f 20 68 6f 6c 64 20 6b 65 79 73 20 66 6f 72  to hold keys for
55d0: 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20 6f  .index b-trees o
55e0: 72 20 6b 65 79 73 20 61 6e 64 20 63 6f 6e 74 65  r keys and conte
55f0: 6e 74 20 66 6f 72 20 74 61 62 6c 65 20 62 2d 74  nt for table b-t
5600: 72 65 65 73 2e 3c 2f 70 3e 0a 3c 2f 70 3e 0a 0a  rees.</p>.</p>..
5610: 3c 70 3e 45 76 65 72 79 20 62 2d 74 72 65 65 20  <p>Every b-tree 
5620: 70 61 67 65 20 68 61 73 20 61 74 20 6d 6f 73 74  page has at most
5630: 20 6f 6e 65 20 70 61 72 65 6e 74 20 62 2d 74 72   one parent b-tr
5640: 65 65 20 70 61 67 65 2e 0a 41 20 62 2d 74 72 65  ee page..A b-tre
5650: 65 20 70 61 67 65 20 77 69 74 68 6f 75 74 20 61  e page without a
5660: 20 70 61 72 65 6e 74 20 69 73 20 63 61 6c 6c 65   parent is calle
5670: 64 20 61 20 72 6f 6f 74 20 70 61 67 65 2e 20 20  d a root page.  
5680: 41 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  A root b-tree pa
5690: 67 65 0a 74 6f 67 65 74 68 65 72 20 77 69 74 68  ge.together with
56a0: 20 74 68 65 20 63 6c 6f 73 75 72 65 20 6f 66 20   the closure of 
56b0: 69 74 73 20 63 68 69 6c 64 72 65 6e 20 66 6f 72  its children for
56c0: 6d 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74  m a complete b-t
56d0: 72 65 65 2e 0a 49 74 20 69 73 20 70 6f 73 73 69  ree..It is possi
56e0: 62 6c 65 20 28 61 6e 64 20 69 6e 20 66 61 63 74  ble (and in fact
56f0: 20 72 61 74 68 65 72 20 63 6f 6d 6d 6f 6e 29 20   rather common) 
5700: 74 6f 20 68 61 76 65 20 61 20 63 6f 6d 70 6c 65  to have a comple
5710: 74 65 20 62 2d 74 72 65 65 0a 74 68 61 74 20 63  te b-tree.that c
5720: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e  onsists of a sin
5730: 67 6c 65 20 70 61 67 65 20 74 68 61 74 20 69 73  gle page that is
5740: 20 62 6f 74 68 20 61 20 6c 65 61 66 20 61 6e 64   both a leaf and
5750: 20 74 68 65 20 72 6f 6f 74 2e 0a 42 65 63 61 75   the root..Becau
5760: 73 65 20 74 68 65 72 65 20 61 72 65 20 70 6f 69  se there are poi
5770: 6e 74 65 72 73 20 66 72 6f 6d 20 70 61 72 65 6e  nters from paren
5780: 74 73 20 74 6f 20 63 68 69 6c 64 72 65 6e 2c 20  ts to children, 
5790: 65 76 65 72 79 20 70 61 67 65 20 6f 66 20 61 0a  every page of a.
57a0: 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20  complete b-tree 
57b0: 63 61 6e 20 62 65 20 6c 6f 63 61 74 65 64 20 69  can be located i
57c0: 66 20 6f 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20  f only the root 
57d0: 70 61 67 65 20 69 73 20 6b 6e 6f 77 6e 2e 20 20  page is known.  
57e0: 48 65 6e 63 65 2c 0a 62 2d 74 72 65 65 73 20 61  Hence,.b-trees a
57f0: 72 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  re identified by
5800: 20 74 68 65 69 72 20 72 6f 6f 74 20 70 61 67 65   their root page
5810: 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   number.</p>..<p
5820: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69  >A b-tree page i
5830: 73 20 65 69 74 68 65 72 20 61 20 74 61 62 6c 65  s either a table
5840: 20 62 2d 74 72 65 65 20 70 61 67 65 20 6f 72 20   b-tree page or 
5850: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
5860: 70 61 67 65 2e 0a 41 6c 6c 20 70 61 67 65 73 20  page..All pages 
5870: 77 69 74 68 69 6e 20 65 61 63 68 20 63 6f 6d 70  within each comp
5880: 6c 65 74 65 20 62 2d 74 72 65 65 20 61 72 65 20  lete b-tree are 
5890: 6f 66 20 74 68 65 20 73 61 6d 65 20 74 79 70 65  of the same type
58a0: 3a 20 65 69 74 68 65 72 20 74 61 62 6c 65 0a 6f  : either table.o
58b0: 72 20 69 6e 64 65 78 2e 20 20 54 68 65 72 65 20  r index.  There 
58c0: 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20  is a one-to-one 
58d0: 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 74 61 62  mapping from tab
58e0: 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74 68  le b-trees in th
58f0: 65 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65  e database .file
5900: 20 74 6f 20 28 6e 6f 6e 2d 76 69 72 74 75 61 6c   to (non-virtual
5910: 29 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  ) tables in the 
5920: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
5930: 20 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65   including syste
5940: 6d 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73  m tables.such as
5950: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20   sqlite_master. 
5960: 20 54 68 65 72 65 20 69 73 20 6f 6e 65 2d 74 6f   There is one-to
5970: 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74  -one mapping bet
5980: 77 65 65 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  ween index b-tre
5990: 65 73 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  es.in the databa
59a0: 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 69  se file and indi
59b0: 63 65 73 20 69 6e 20 74 68 65 20 73 63 68 65 6d  ces in the schem
59c0: 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70  a, including imp
59d0: 6c 69 65 64 20 69 6e 64 69 63 65 73 0a 63 72 65  lied indices.cre
59e0: 61 74 65 64 20 62 79 20 75 6e 69 71 75 65 6e 65  ated by uniquene
59f0: 73 73 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20  ss constraints. 
5a00: 20 54 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72   The b-tree corr
5a10: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65  esponding to the
5a20: 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74  .sqlite_master t
5a30: 61 62 6c 65 20 61 6c 77 61 79 73 20 68 61 73 20  able always has 
5a40: 69 74 73 20 72 6f 6f 74 20 70 61 67 65 20 6f 6e  its root page on
5a50: 20 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f   a page number o
5a60: 66 20 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  f 1..The sqlite_
5a70: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e  master table con
5a80: 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 20 70  tains the root p
5a90: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 65  age number for e
5aa0: 76 65 72 79 20 6f 74 68 65 72 20 0a 74 61 62 6c  very other .tabl
5ab0: 65 20 61 6e 64 20 69 6e 64 65 78 20 69 6e 20 74  e and index in t
5ac0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
5ad0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65  .</p>..<p>Each e
5ae0: 6e 74 72 79 20 69 6e 20 61 20 74 61 62 6c 65 20  ntry in a table 
5af0: 62 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20  b-tree consists 
5b00: 6f 66 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e  of a 64-bit sign
5b10: 65 64 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 61  ed integer key.a
5b20: 6e 64 20 75 70 20 74 6f 20 32 31 34 37 34 38 33  nd up to 2147483
5b30: 36 34 37 20 62 79 74 65 73 20 6f 66 20 61 72 62  647 bytes of arb
5b40: 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 49 6e  itrary data.  In
5b50: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
5b60: 72 65 65 73 0a 68 6f 6c 64 20 6f 6e 6c 79 20 6b  rees.hold only k
5b70: 65 79 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73  eys and pointers
5b80: 20 74 6f 20 63 68 69 6c 64 72 65 6e 2e 20 20 41   to children.  A
5b90: 6c 6c 20 64 61 74 61 20 69 73 20 63 6f 6e 74 61  ll data is conta
5ba0: 69 6e 65 64 20 69 6e 20 74 68 65 0a 74 61 62 6c  ined in the.tabl
5bb0: 65 20 62 2d 74 72 65 65 20 6c 65 61 76 65 73 2e  e b-tree leaves.
5bc0: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e  </p>..<p>Each en
5bd0: 74 72 79 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  try in an index 
5be0: 62 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20  b-tree consists 
5bf0: 6f 66 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  of an arbitrary 
5c00: 6b 65 79 20 6f 66 20 75 70 0a 74 6f 20 32 31 34  key of up.to 214
5c10: 37 34 38 33 36 34 37 20 62 79 74 65 73 20 69 6e  7483647 bytes in
5c20: 20 6c 65 6e 67 74 68 20 61 6e 64 20 6e 6f 20 64   length and no d
5c30: 61 74 61 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ata.</p>..<tcl>h
5c40: 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 5f  d_fragment cell_
5c50: 70 61 79 6c 6f 61 64 20 7b 63 65 6c 6c 20 70 61  payload {cell pa
5c60: 79 6c 6f 61 64 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  yload}</tcl>.<p>
5c70: 44 65 66 69 6e 65 20 74 68 65 20 22 70 61 79 6c  Define the "payl
5c80: 6f 61 64 22 20 6f 66 20 61 20 63 65 6c 6c 20 74  oad" of a cell t
5c90: 6f 20 62 65 20 74 68 65 20 61 72 62 69 74 72 61  o be the arbitra
5ca0: 72 79 20 6c 65 6e 67 74 68 20 73 65 63 74 69 6f  ry length sectio
5cb0: 6e 0a 6f 66 20 74 68 65 20 63 65 6c 6c 2e 20 20  n.of the cell.  
5cc0: 46 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74  For an index b-t
5cd0: 72 65 65 2c 20 74 68 65 20 6b 65 79 20 69 73 20  ree, the key is 
5ce0: 61 6c 77 61 79 73 20 61 72 62 69 74 72 61 72 79  always arbitrary
5cf0: 20 69 6e 20 6c 65 6e 67 74 68 0a 61 6e 64 20 68   in length.and h
5d00: 65 6e 63 65 20 74 68 65 20 70 61 79 6c 6f 61 64  ence the payload
5d10: 20 69 73 20 74 68 65 20 6b 65 79 2e 20 20 54 68   is the key.  Th
5d20: 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74  ere are no arbit
5d30: 72 61 72 79 20 6c 65 6e 67 74 68 20 65 6c 65 6d  rary length elem
5d40: 65 6e 74 73 0a 69 6e 20 74 68 65 20 63 65 6c 6c  ents.in the cell
5d50: 73 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 74 61  s of interior ta
5d60: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 73  ble b-tree pages
5d70: 20 61 6e 64 20 73 6f 20 74 68 6f 73 65 20 63 65   and so those ce
5d80: 6c 6c 73 20 68 61 76 65 20 6e 6f 0a 70 61 79 6c  lls have no.payl
5d90: 6f 61 64 2e 20 20 54 61 62 6c 65 20 62 2d 74 72  oad.  Table b-tr
5da0: 65 65 20 6c 65 61 66 20 70 61 67 65 73 20 63 6f  ee leaf pages co
5db0: 6e 74 61 69 6e 20 61 72 62 69 74 72 61 72 79 20  ntain arbitrary 
5dc0: 6c 65 6e 67 74 68 20 63 6f 6e 74 65 6e 74 20 61  length content a
5dd0: 6e 64 0a 73 6f 20 66 6f 72 20 63 65 6c 6c 73 20  nd.so for cells 
5de0: 6f 6e 20 74 68 6f 73 65 20 70 61 67 65 73 20 74  on those pages t
5df0: 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68  he payload is th
5e00: 65 20 63 6f 6e 74 65 6e 74 2e 0a 3c 70 3e 57 68  e content..<p>Wh
5e10: 65 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20 70  en the size of p
5e20: 61 79 6c 6f 61 64 20 66 6f 72 20 61 20 63 65 6c  ayload for a cel
5e30: 6c 20 65 78 63 65 65 64 73 20 61 20 63 65 72 74  l exceeds a cert
5e40: 61 69 6e 20 74 68 72 65 73 68 6f 6c 64 20 28 74  ain threshold (t
5e50: 6f 0a 62 65 20 64 65 66 69 6e 65 64 20 6c 61 74  o.be defined lat
5e60: 65 72 29 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68  er) then only th
5e70: 65 20 66 69 72 73 74 20 66 65 77 20 62 79 74 65  e first few byte
5e80: 73 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64  s of the payload
5e90: 0a 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74  .are stored on t
5ea0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 61  he b-tree page a
5eb0: 6e 64 20 74 68 65 20 62 61 6c 61 6e 63 65 20 69  nd the balance i
5ec0: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  s stored in a li
5ed0: 6e 6b 65 64 20 6c 69 73 74 0a 6f 66 20 63 6f 6e  nked list.of con
5ee0: 74 65 6e 74 20 6f 76 65 72 66 6c 6f 77 20 70 61  tent overflow pa
5ef0: 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62  ges.</p>..<p>A b
5f00: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 64 69  -tree page is di
5f10: 76 69 64 65 64 20 69 6e 74 6f 20 72 65 67 69 6f  vided into regio
5f20: 6e 73 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  ns in the follow
5f30: 69 6e 67 20 6f 72 64 65 72 3a 0a 0a 3c 6f 6c 3e  ing order:..<ol>
5f40: 0a 3c 6c 69 3e 54 68 65 20 31 30 30 2d 62 79 74  .<li>The 100-byt
5f50: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
5f60: 68 65 61 64 65 72 20 28 66 6f 75 6e 64 20 6f 6e  header (found on
5f70: 20 70 61 67 65 20 31 20 6f 6e 6c 79 29 0a 3c 6c   page 1 only).<l
5f80: 69 3e 54 68 65 20 38 20 6f 72 20 31 32 20 62 79  i>The 8 or 12 by
5f90: 74 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  te b-tree page h
5fa0: 65 61 64 65 72 0a 3c 6c 69 3e 54 68 65 20 63 65  eader.<li>The ce
5fb0: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
5fc0: 0a 3c 6c 69 3e 55 6e 61 6c 6c 6f 63 61 74 65 64  .<li>Unallocated
5fd0: 20 73 70 61 63 65 0a 3c 6c 69 3e 54 68 65 20 63   space.<li>The c
5fe0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
5ff0: 0a 3c 6c 69 3e 54 68 65 20 72 65 73 65 72 76 65  .<li>The reserve
6000: 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a  d region..</ol>.
6010: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 31 30 30  </p>..<p>The 100
6020: 2d 62 79 74 65 20 64 61 74 61 62 61 73 65 20 66  -byte database f
6030: 69 6c 65 20 68 65 61 64 65 72 20 69 73 20 66 6f  ile header is fo
6040: 75 6e 64 20 6f 6e 6c 79 20 6f 6e 20 70 61 67 65  und only on page
6050: 20 31 2c 20 77 68 69 63 68 20 69 73 0a 61 6c 77   1, which is.alw
6060: 61 79 73 20 61 20 74 61 62 6c 65 20 62 2d 74 72  ays a table b-tr
6070: 65 65 20 70 61 67 65 2e 20 20 41 6c 6c 20 6f 74  ee page.  All ot
6080: 68 65 72 20 62 2d 74 72 65 65 20 70 61 67 65 73  her b-tree pages
6090: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
60a0: 20 66 69 6c 65 0a 6f 6d 69 74 20 74 68 69 73 20   file.omit this 
60b0: 31 30 30 2d 62 79 74 65 20 68 65 61 64 65 72 2e  100-byte header.
60c0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 73  </p>..<p>The res
60d0: 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20  erved region is 
60e0: 61 6e 20 61 72 65 61 20 6f 66 20 75 6e 75 73 65  an area of unuse
60f0: 64 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  d space at the e
6100: 6e 64 20 6f 66 20 65 76 65 72 79 0a 70 61 67 65  nd of every.page
6110: 20 28 65 78 63 65 70 74 20 74 68 65 20 6c 6f 63   (except the loc
6120: 6b 69 6e 67 20 70 61 67 65 29 20 74 68 61 74 20  king page) that 
6130: 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 75  extensions can u
6140: 73 65 20 74 6f 20 68 6f 6c 64 20 70 65 72 2d 70  se to hold per-p
6150: 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  age.information.
6160: 20 20 5e 54 68 65 20 73 69 7a 65 20 6f 66 20 74    ^The size of t
6170: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
6180: 6f 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  on is determined
6190: 20 62 79 20 74 68 65 20 6f 6e 65 2d 62 79 74 65   by the one-byte
61a0: 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65  .unsigned intege
61b0: 72 20 66 6f 75 6e 64 20 61 74 20 61 6e 20 6f 66  r found at an of
61c0: 66 73 65 74 20 6f 66 20 32 30 20 69 6e 74 6f 20  fset of 20 into 
61d0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
61e0: 65 20 68 65 61 64 65 72 2e 0a 54 68 65 20 73 69  e header..The si
61f0: 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76  ze of the reserv
6200: 65 64 20 72 65 67 69 6f 6e 20 69 73 20 75 73 75  ed region is usu
6210: 61 6c 6c 79 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a  ally zero.</p>..
6220: 3c 70 3e 54 68 65 20 62 2d 74 72 65 65 20 70 61  <p>The b-tree pa
6230: 67 65 20 68 65 61 64 65 72 20 69 73 20 38 20 62  ge header is 8 b
6240: 79 74 65 73 20 69 6e 20 73 69 7a 65 20 66 6f 72  ytes in size for
6250: 20 6c 65 61 66 20 70 61 67 65 73 20 61 6e 64 20   leaf pages and 
6260: 31 32 0a 62 79 74 65 73 20 66 6f 72 20 69 6e 74  12.bytes for int
6270: 65 72 69 6f 72 20 70 61 67 65 73 2e 20 20 41 6c  erior pages.  Al
6280: 6c 20 6d 75 6c 74 69 62 79 74 65 20 76 61 6c 75  l multibyte valu
6290: 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 68  es in the page h
62a0: 65 61 64 65 72 0a 61 72 65 20 62 69 67 2d 65 6e  eader.are big-en
62b0: 64 69 61 6e 2e 0a 54 68 65 20 62 2d 74 72 65 65  dian..The b-tree
62c0: 20 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20   page header is 
62d0: 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20  composed of the 
62e0: 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64 73  following fields
62f0: 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
6300: 3c 69 3e 42 2d 74 72 65 65 20 50 61 67 65 20 48  <i>B-tree Page H
6310: 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
6320: 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  <br>.<table bord
6330: 65 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22  er=1 width="80%"
6340: 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
6350: 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
6360: 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
6370: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6380: 69 67 6e 3d 74 6f 70 3e 30 3c 74 64 20 61 6c 69  ign=top>0<td ali
6390: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
63a0: 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  =top>1<td align=
63b0: 6c 65 66 74 3e 0a 41 20 66 6c 61 67 20 69 6e 64  left>.A flag ind
63c0: 69 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72  icating the b-tr
63d0: 65 65 20 70 61 67 65 20 74 79 70 65 0a 5e 41 20  ee page type.^A 
63e0: 76 61 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e 73  value of 2 means
63f0: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20   the page is an 
6400: 69 6e 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62  interior index b
6410: 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76  -tree page..^A v
6420: 61 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e 73 20  alue of 5 means 
6430: 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69  the page is an i
6440: 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d  nterior table b-
6450: 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61  tree page..^A va
6460: 6c 75 65 20 6f 66 20 31 30 20 6d 65 61 6e 73 20  lue of 10 means 
6470: 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65  the page is a le
6480: 61 66 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  af index b-tree 
6490: 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f  page..^A value o
64a0: 66 20 31 33 20 6d 65 61 6e 73 20 74 68 65 20 70  f 13 means the p
64b0: 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 74 61  age is a leaf ta
64c0: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
64d0: 0a 5e 41 6e 79 20 6f 74 68 65 72 20 76 61 6c 75  .^Any other valu
64e0: 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65  e for the b-tree
64f0: 20 70 61 67 65 20 74 79 70 65 20 69 73 20 61 6e   page type is an
6500: 20 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74 64 20   error..<tr><td 
6510: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6520: 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69  ign=top>1<td ali
6530: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6540: 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  =top>2<td align=
6550: 6c 65 66 74 3e 0a 42 79 74 65 20 6f 66 66 73 65  left>.Byte offse
6560: 74 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20  t into the page 
6570: 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65  of the first fre
6580: 65 62 6c 6f 63 6b 0a 3c 74 72 3e 3c 74 64 20 61  eblock.<tr><td a
6590: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
65a0: 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67  gn=top>3<td alig
65b0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
65c0: 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>2<td align=l
65d0: 65 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66 20 63  eft>.Number of c
65e0: 65 6c 6c 73 20 6f 6e 20 74 68 69 73 20 70 61 67  ells on this pag
65f0: 65 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  e.<tr><td align=
6600: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6610: 70 3e 35 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>5<td align=cen
6620: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32  ter valign=top>2
6630: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
6640: 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 66 69  Offset to the fi
6650: 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
6660: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65  cell content are
6670: 61 2e 20 20 41 20 7a 65 72 6f 20 76 61 6c 75 65  a.  A zero value
6680: 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 70 72   is used to repr
6690: 65 73 65 6e 74 20 61 6e 20 6f 66 66 73 65 74 20  esent an offset 
66a0: 6f 66 20 36 35 35 33 36 2c 20 77 68 69 63 68 20  of 65536, which 
66b0: 6f 63 63 75 72 73 20 6f 6e 20 61 6e 20 65 6d 70  occurs on an emp
66c0: 74 79 20 72 6f 6f 74 20 70 61 67 65 20 77 68 65  ty root page whe
66d0: 6e 20 75 73 69 6e 67 20 61 20 36 35 35 33 36 2d  n using a 65536-
66e0: 62 79 74 65 20 70 61 67 65 20 73 69 7a 65 2e 0a  byte page size..
66f0: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
6700: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6710: 37 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  7<td align=cente
6720: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
6730: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75  d align=left>.Nu
6740: 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e 74  mber of fragment
6750: 65 64 20 66 72 65 65 20 62 79 74 65 73 20 77 69  ed free bytes wi
6760: 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f  thin the cell co
6770: 6e 74 65 6e 74 20 61 72 65 61 0a 3c 74 72 3e 3c  ntent area.<tr><
6780: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6790: 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c 74 64 20  valign=top>8<td 
67a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
67b0: 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20 61 6c 69  ign=top>4<td ali
67c0: 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 72 69 67  gn=left>.The rig
67d0: 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 20  ht-most pointer 
67e0: 28 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65  (interior b-tree
67f0: 20 70 61 67 65 73 20 6f 6e 6c 79 29 0a 3c 2f 74   pages only).</t
6800: 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  able></blockquot
6810: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  e></center>..<p>
6820: 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65  ^The cell pointe
6830: 72 20 61 72 72 61 79 20 6f 66 20 61 20 62 2d 74  r array of a b-t
6840: 72 65 65 20 70 61 67 65 20 69 6d 6d 65 64 69 61  ree page immedia
6850: 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65  tely follows the
6860: 20 62 2d 74 72 65 65 0a 70 61 67 65 20 68 65 61   b-tree.page hea
6870: 64 65 72 2e 20 20 4c 65 74 20 4b 20 62 65 20 74  der.  Let K be t
6880: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c  he number of cel
6890: 6c 73 20 6f 6e 20 74 68 65 20 62 74 72 65 65 2e  ls on the btree.
68a0: 20 20 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e    ^The cell poin
68b0: 74 65 72 0a 61 72 72 61 79 20 63 6f 6e 73 69 73  ter.array consis
68c0: 74 73 20 6f 66 20 4b 20 32 2d 62 79 74 65 20 69  ts of K 2-byte i
68d0: 6e 74 65 67 65 72 20 6f 66 66 73 65 74 73 20 74  nteger offsets t
68e0: 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  o the cell conte
68f0: 6e 74 73 2e 20 20 5e 54 68 65 0a 63 65 6c 6c 20  nts.  ^The.cell 
6900: 70 6f 69 6e 74 65 72 73 20 61 72 65 20 61 72 72  pointers are arr
6910: 61 6e 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64  anged in key ord
6920: 65 72 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73  er with left-mos
6930: 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c  t cell (the cell
6940: 20 77 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65   with the.smalle
6950: 73 74 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e  st key) first an
6960: 64 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  d the right-most
6970: 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20   cell (the cell 
6980: 77 69 74 68 20 74 68 65 20 6c 61 72 67 65 73 74  with the largest
6990: 0a 6b 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a  .key) last.</p>.
69a0: 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74  .<p>Cell content
69b0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
69c0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72  e cell content r
69d0: 65 67 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74  egion of the b-t
69e0: 72 65 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65  ree page..SQLite
69f0: 20 73 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63   strives to plac
6a00: 65 20 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74  e cells as far t
6a10: 6f 77 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66  oward the end of
6a20: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
6a30: 20 61 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f   as.it can, in o
6a40: 72 64 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70  rder to leave sp
6a50: 61 63 65 20 66 6f 72 20 66 75 74 75 72 65 20 67  ace for future g
6a60: 72 6f 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c  rowth of the cel
6a70: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e  l pointer array.
6a80: 0a 54 68 65 20 61 72 65 61 20 69 6e 20 62 65 74  .The area in bet
6a90: 77 65 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65  ween the last ce
6aa0: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
6ab0: 20 65 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62   entry and the b
6ac0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20  eginning of.the 
6ad0: 66 69 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68  first cell is th
6ae0: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65  e unallocated re
6af0: 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  gion..</p>..<p>^
6b00: 49 66 20 61 20 70 61 67 65 20 63 6f 6e 74 61 69  If a page contai
6b10: 6e 73 20 6e 6f 20 63 65 6c 6c 73 20 28 77 68 69  ns no cells (whi
6b20: 63 68 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69  ch is only possi
6b30: 62 6c 65 20 66 6f 72 20 61 20 72 6f 6f 74 20 70  ble for a root p
6b40: 61 67 65 0a 6f 66 20 61 20 74 61 62 6c 65 20 74  age.of a table t
6b50: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  hat contains no 
6b60: 72 6f 77 73 29 20 74 68 65 6e 20 74 68 65 20 6f  rows) then the o
6b70: 66 66 73 65 74 20 74 6f 20 74 68 65 20 63 65 6c  ffset to the cel
6b80: 6c 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 20 77  l content.area w
6b90: 69 6c 6c 20 65 71 75 61 6c 20 74 68 65 20 70 61  ill equal the pa
6ba0: 67 65 20 73 69 7a 65 20 6d 69 6e 75 73 20 74 68  ge size minus th
6bb0: 65 20 62 79 74 65 73 20 6f 66 20 72 65 73 65 72  e bytes of reser
6bc0: 76 65 64 20 73 70 61 63 65 2e 20 20 5e 28 49 66  ved space.  ^(If
6bd0: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73  .the database us
6be0: 65 73 20 61 20 36 35 35 33 36 2d 62 79 74 65 20  es a 65536-byte 
6bf0: 70 61 67 65 20 73 69 7a 65 20 61 6e 64 20 74 68  page size and th
6c00: 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65  e reserved space
6c10: 20 69 73 20 7a 65 72 6f 0a 28 74 68 65 20 75 73   is zero.(the us
6c20: 75 61 6c 20 76 61 6c 75 65 20 66 6f 72 20 72 65  ual value for re
6c30: 73 65 72 76 65 64 20 73 70 61 63 65 29 20 74 68  served space) th
6c40: 65 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  en the cell cont
6c50: 65 6e 74 20 6f 66 66 73 65 74 20 6f 66 20 61 6e  ent offset of an
6c60: 0a 65 6d 70 74 79 20 70 61 67 65 20 77 61 6e 74  .empty page want
6c70: 73 20 74 6f 20 62 65 20 36 35 35 33 36 2e 20 20  s to be 65536.  
6c80: 0a 48 6f 77 65 76 65 72 2c 20 74 68 61 74 20 69  .However, that i
6c90: 6e 74 65 67 65 72 20 69 73 20 74 6f 6f 20 6c 61  nteger is too la
6ca0: 72 67 65 20 74 6f 20 62 65 20 73 74 6f 72 65 64  rge to be stored
6cb0: 20 69 6e 20 61 0a 32 2d 62 79 74 65 20 75 6e 73   in a.2-byte uns
6cc0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 73  igned integer, s
6cd0: 6f 20 61 20 76 61 6c 75 65 20 6f 66 20 30 20 69  o a value of 0 i
6ce0: 73 20 75 73 65 64 20 69 6e 20 69 74 73 20 70 6c  s used in its pl
6cf0: 61 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72 65  ace.)^..<p>A fre
6d00: 65 62 6c 6f 63 6b 20 69 73 20 61 20 73 74 72 75  eblock is a stru
6d10: 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 69 64  cture used to id
6d20: 65 6e 74 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74  entify unallocat
6d30: 65 64 20 73 70 61 63 65 20 77 69 74 68 69 6e 0a  ed space within.
6d40: 61 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20  a b-tree page.  
6d50: 46 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f  Freeblocks are o
6d60: 72 67 61 6e 69 7a 65 64 20 61 73 20 61 20 63 68  rganized as a ch
6d70: 61 69 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74  ain.  ^The first
6d80: 20 32 20 62 79 74 65 73 20 6f 66 0a 61 20 66 72   2 bytes of.a fr
6d90: 65 65 62 6c 6f 63 6b 20 61 72 65 20 61 20 62 69  eeblock are a bi
6da0: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
6db0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66   which is the of
6dc0: 66 73 65 74 20 69 6e 20 74 68 65 20 62 2d 74 72  fset in the b-tr
6dd0: 65 65 20 70 61 67 65 0a 6f 66 20 74 68 65 20 6e  ee page.of the n
6de0: 65 78 74 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e  ext freeblock in
6df0: 20 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a   the chain, or z
6e00: 65 72 6f 20 69 66 20 74 68 65 20 66 72 65 65 62  ero if the freeb
6e10: 6c 6f 63 6b 20 69 73 20 74 68 65 20 6c 61 73 74  lock is the last
6e20: 20 6f 6e 0a 74 68 65 20 63 68 61 69 6e 2e 20 20   on.the chain.  
6e30: 5e 54 68 65 20 74 68 69 72 64 20 61 6e 64 20 66  ^The third and f
6e40: 6f 75 72 74 68 20 62 79 74 65 73 20 6f 66 20 65  ourth bytes of e
6e50: 61 63 68 20 66 72 65 65 62 6c 6f 63 6b 20 66 6f  ach freeblock fo
6e60: 72 6d 0a 61 20 62 69 67 2d 65 6e 64 69 61 6e 20  rm.a big-endian 
6e70: 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
6e80: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
6e90: 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 62 79   freeblock in by
6ea0: 74 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 74  tes, including.t
6eb0: 68 65 20 34 2d 62 79 74 65 20 68 65 61 64 65 72  he 4-byte header
6ec0: 2e 20 20 5e 46 72 65 65 62 6c 6f 63 6b 73 20 61  .  ^Freeblocks a
6ed0: 72 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e 65 63  re always connec
6ee0: 74 65 64 20 69 6e 20 6f 72 64 65 72 20 0a 6f 66  ted in order .of
6ef0: 20 69 6e 63 72 65 61 73 69 6e 67 20 6f 66 66 73   increasing offs
6f00: 65 74 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64  et.  ^The second
6f10: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d   field of the b-
6f20: 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72  tree page header
6f30: 20 69 73 20 74 68 65 0a 6f 66 66 73 65 74 20 6f   is the.offset o
6f40: 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65  f the first free
6f50: 62 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f 20 69  block, or zero i
6f60: 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66  f there are no f
6f70: 72 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74 68 65  reeblocks on the
6f80: 0a 70 61 67 65 2e 20 20 5e 49 6e 20 61 20 77 65  .page.  ^In a we
6f90: 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65  ll-formed b-tree
6fa0: 20 70 61 67 65 2c 20 74 68 65 72 65 20 77 69 6c   page, there wil
6fb0: 6c 20 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c  l always be at l
6fc0: 65 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65  east one cell.be
6fd0: 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 66  fore the first f
6fe0: 72 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c  reeblock.</p>..<
6ff0: 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 72 65  p>A freeblock re
7000: 71 75 69 72 65 73 20 61 74 20 6c 65 61 73 74 20  quires at least 
7010: 34 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65  4 bytes of space
7020: 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
7030: 6e 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70  n isolated.group
7040: 20 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33 20 75   of 1, 2, or 3 u
7050: 6e 75 73 65 64 20 62 79 74 65 73 20 77 69 74 68  nused bytes with
7060: 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  in the cell cont
7070: 65 6e 74 20 61 72 65 61 2c 20 74 68 6f 73 65 20  ent area, those 
7080: 62 79 74 65 73 0a 63 6f 6d 70 72 69 73 65 20 61  bytes.comprise a
7090: 20 66 72 61 67 6d 65 6e 74 2e 20 20 5e 54 68 65   fragment.  ^The
70a0: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
70b0: 20 62 79 74 65 73 20 69 6e 20 61 6c 6c 20 66 72   bytes in all fr
70c0: 61 67 6d 65 6e 74 73 20 69 73 20 73 74 6f 72 65  agments is store
70d0: 64 0a 69 6e 20 74 68 65 20 66 69 66 74 68 20 66  d.in the fifth f
70e0: 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72  ield of the b-tr
70f0: 65 65 20 70 61 67 65 20 68 65 61 64 65 72 2e 20  ee page header. 
7100: 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d   ^In a well-form
7110: 65 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a  ed b-tree page,.
7120: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
7130: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 66 72 61   of bytes in fra
7140: 67 6d 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65  gments may not e
7150: 78 63 65 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c  xceed 60.</p>..<
7160: 70 3e 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75  p>The total amou
7170: 6e 74 20 6f 66 20 66 72 65 65 20 73 70 61 63 65  nt of free space
7180: 20 6f 6e 20 61 20 62 2d 74 72 65 65 20 70 61 67   on a b-tree pag
7190: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68  e consists of th
71a0: 65 20 73 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e  e size.of the un
71b0: 61 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e  allocated region
71c0: 20 70 6c 75 73 20 74 68 65 20 74 6f 74 61 6c 20   plus the total 
71d0: 73 69 7a 65 20 6f 66 20 61 6c 6c 20 66 72 65 65  size of all free
71e0: 62 6c 6f 63 6b 73 20 70 6c 75 73 20 74 68 65 0a  blocks plus the.
71f0: 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65  number of fragme
7200: 6e 74 65 64 20 66 72 65 65 20 62 79 74 65 73 2e  nted free bytes.
7210: 20 20 5e 53 51 4c 69 74 65 20 6d 61 79 20 66 72    ^SQLite may fr
7220: 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20  om time to time 
7230: 72 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74  reorganize.a b-t
7240: 72 65 65 20 70 61 67 65 20 73 6f 20 74 68 61 74  ree page so that
7250: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72   there are no fr
7260: 65 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67  eeblocks or frag
7270: 6d 65 6e 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a  ment bytes, all.
7280: 75 6e 75 73 65 64 20 62 79 74 65 73 20 61 72 65  unused bytes are
7290: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
72a0: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70  e unallocated sp
72b0: 61 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20  ace region, and 
72c0: 61 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20 70 61  all.cells are pa
72d0: 63 6b 65 64 20 74 69 67 68 74 6c 79 20 61 74 20  cked tightly at 
72e0: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
72f0: 61 67 65 2e 20 20 54 68 69 73 20 69 73 20 63 61  age.  This is ca
7300: 6c 6c 65 64 20 0a 22 64 65 66 72 61 67 6d 65 6e  lled ."defragmen
7310: 74 69 6e 67 22 20 74 68 65 20 62 2d 74 72 65 65  ting" the b-tree
7320: 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   page.</p>..<tcl
7330: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72  >hd_fragment var
7340: 69 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65  int {variable-le
7350: 6e 67 74 68 20 69 6e 74 65 67 65 72 7d 20 7b 76  ngth integer} {v
7360: 61 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70  arint}</tcl>..<p
7370: 3e 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  >A variable-leng
7380: 74 68 20 69 6e 74 65 67 65 72 20 6f 72 20 22 76  th integer or "v
7390: 61 72 69 6e 74 22 20 69 73 20 61 20 73 74 61 74  arint" is a stat
73a0: 69 63 20 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64  ic Huffman encod
73b0: 69 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20 74 77  ing.of 64-bit tw
73c0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
73d0: 74 65 67 65 72 73 20 74 68 61 74 20 75 73 65 73  tegers that uses
73e0: 20 6c 65 73 73 20 73 70 61 63 65 20 66 6f 72 20   less space for 
73f0: 73 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a  small positive .
7400: 76 61 6c 75 65 73 2e 20 0a 41 20 76 61 72 69 6e  values. .A varin
7410: 74 20 69 73 20 62 65 74 77 65 65 6e 20 31 20 61  t is between 1 a
7420: 6e 64 20 39 20 62 79 74 65 73 20 69 6e 20 6c 65  nd 9 bytes in le
7430: 6e 67 74 68 2e 20 20 54 68 65 20 76 61 72 69 6e  ngth.  The varin
7440: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 65 69  t consists of ei
7450: 74 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72  ther.zero or mor
7460: 65 20 62 79 74 65 20 77 68 69 63 68 20 68 61 76  e byte which hav
7470: 65 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  e the high-order
7480: 20 62 69 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65   bit set followe
7490: 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 62 79  d by a single by
74a0: 74 65 0a 77 69 74 68 20 74 68 65 20 68 69 67 68  te.with the high
74b0: 2d 6f 72 64 65 72 20 62 69 74 20 63 6c 65 61 72  -order bit clear
74c0: 2c 20 6f 72 20 6e 69 6e 65 20 62 79 74 65 73 2c  , or nine bytes,
74d0: 20 77 68 69 63 68 65 76 65 72 20 69 73 20 73 68   whichever is sh
74e0: 6f 72 74 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72  orter..The lower
74f0: 20 73 65 76 65 6e 20 62 69 74 73 20 6f 66 20 65   seven bits of e
7500: 61 63 68 20 6f 66 20 74 68 65 20 66 69 72 73 74  ach of the first
7510: 20 65 69 67 68 74 20 62 79 74 65 73 20 61 6e 64   eight bytes and
7520: 20 61 6c 6c 20 38 20 62 69 74 73 20 6f 66 0a 74   all 8 bits of.t
7530: 68 65 20 6e 69 6e 74 68 20 62 79 74 65 20 61 72  he ninth byte ar
7540: 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 6e 73  e used to recons
7550: 74 72 75 63 74 20 74 68 65 20 36 34 2d 62 69 74  truct the 64-bit
7560: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
7570: 20 69 6e 74 65 67 65 72 2e 0a 56 61 72 69 6e 74   integer..Varint
7580: 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e  s are big-endian
7590: 3a 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f  : bits taken fro
75a0: 6d 20 74 68 65 20 65 61 72 6c 69 65 72 20 62 79  m the earlier by
75b0: 74 65 20 6f 66 20 74 68 65 20 76 61 72 69 6e 74  te of the varint
75c0: 0a 61 72 65 20 74 68 65 20 6d 6f 72 65 20 73 69  .are the more si
75d0: 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 62 69  gnificant and bi
75e0: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68  ts taken from th
75f0: 65 20 6c 61 74 65 72 20 62 79 74 65 73 2e 20 3c  e later bytes. <
7600: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d  /p>..<p>The form
7610: 61 74 20 6f 66 20 61 20 63 65 6c 6c 20 64 65 70  at of a cell dep
7620: 65 6e 64 73 20 6f 6e 20 77 68 69 63 68 20 6b 69  ends on which ki
7630: 6e 64 20 6f 66 20 62 2d 74 72 65 65 20 70 61 67  nd of b-tree pag
7640: 65 20 74 68 65 20 63 65 6c 6c 0a 61 70 70 65 61  e the cell.appea
7650: 72 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f 6c 6c  rs on.  The foll
7660: 6f 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f 77  owing table show
7670: 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f  s the elements o
7680: 66 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64  f a cell, in.ord
7690: 65 72 20 6f 66 20 61 70 70 65 61 72 61 6e 63 65  er of appearance
76a0: 2c 20 66 6f 72 20 74 68 65 20 76 61 72 69 6f 75  , for the variou
76b0: 73 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79  s b-tree page ty
76c0: 70 65 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  pes.</p>..<block
76d0: 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 3c  quote><dl>.<dt><
76e0: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c  p>Table B-Tree L
76f0: 65 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64  eaf Cell:</p></d
7700: 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c  t>.<dd><p><ul>.<
7710: 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63  li>A varint whic
7720: 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  h is the total n
7730: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
7740: 66 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75  f payload, inclu
7750: 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f  ding any.overflo
7760: 77 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77  w.<li>A varint w
7770: 68 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65  hich is the inte
7780: 67 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20  ger key, a.k.a. 
7790: 22 72 6f 77 69 64 22 0a 3c 6c 69 3e 54 68 65 20  "rowid".<li>The 
77a0: 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20  initial portion 
77b0: 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74  of the payload t
77c0: 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69  hat does not spi
77d0: 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70  ll to overflow.p
77e0: 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ages..<li>A 4-by
77f0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
7800: 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65  teger page numbe
7810: 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  r for the first 
7820: 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72  page of the.over
7830: 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d  flow page list -
7840: 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20   omitted if all 
7850: 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20  payload fits on 
7860: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
7870: 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a  .</ul></p></dd>.
7880: 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d  .<dt><p>Table B-
7890: 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65  Tree Interior Ce
78a0: 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  ll:</p></dt>.<dd
78b0: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34  ><p><ul>.<li>A 4
78c0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
78d0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69   page number whi
78e0: 63 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63  ch is the left c
78f0: 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c  hild pointer..<l
7900: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
7910: 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20   is the integer 
7920: 6b 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64  key.</ul></p></d
7930: 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78  d>..<dt><p>Index
7940: 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c   B-Tree Leaf Cel
7950: 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  l:</p></dt>.<dd>
7960: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61  <p><ul>.<li>A va
7970: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
7980: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
7990: 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20 70  f bytes of key p
79a0: 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e  ayload, includin
79b0: 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c  g any.overflow.<
79c0: 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70  li>The initial p
79d0: 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61  ortion of the pa
79e0: 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20  yload that does 
79f0: 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65  not spill to ove
7a00: 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69  rflow.pages..<li
7a10: 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  >A 4-byte big-en
7a20: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67  dian integer pag
7a30: 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  e number for the
7a40: 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74   first page of t
7a50: 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  he.overflow page
7a60: 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20   list - omitted 
7a70: 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66  if all payload f
7a80: 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  its on the b-tre
7a90: 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70  e page..</ul></p
7aa0: 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49  ></dd>..<dt><p>I
7ab0: 6e 64 65 78 20 42 2d 54 72 65 65 20 49 6e 74 65  ndex B-Tree Inte
7ac0: 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f  rior Cell:</p></
7ad0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a  dt>.<dd><p><ul>.
7ae0: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
7af0: 2d 65 6e 64 69 61 6e 70 61 67 65 20 6e 75 6d 62  -endianpage numb
7b00: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
7b10: 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74  left child point
7b20: 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74  er..<li>A varint
7b30: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f   which is the to
7b40: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
7b50: 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f  tes of key paylo
7b60: 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e  ad, including an
7b70: 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54  y.overflow.<li>T
7b80: 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69  he initial porti
7b90: 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  on of the payloa
7ba0: 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  d that does not 
7bb0: 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f  spill to overflo
7bc0: 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34  w.pages..<li>A 4
7bd0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
7be0: 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75   integer page nu
7bf0: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72  mber for the fir
7c00: 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  st page of the.o
7c10: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73  verflow page lis
7c20: 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61  t - omitted if a
7c30: 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20  ll payload fits 
7c40: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
7c50: 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64  ge..</ul></p></d
7c60: 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71  d>.</dl></blockq
7c70: 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e  uote>..<p>The in
7c80: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20  formation above 
7c90: 63 61 6e 20 62 65 20 72 65 63 61 73 74 20 69 6e  can be recast in
7ca0: 74 6f 20 61 20 74 61 62 6c 65 20 66 6f 72 6d 61  to a table forma
7cb0: 74 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  t as follows:</p
7cc0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
7cd0: 65 6e 74 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b  ent cellformat {
7ce0: 63 65 6c 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d  cell format summ
7cf0: 61 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74  ary}</tcl>.<cent
7d00: 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65  er>.<i>B-tree Ce
7d10: 6c 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74  ll Format</i>.<t
7d20: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69  able border=1 wi
7d30: 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c  dth="80%">.<tr><
7d40: 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74  th rowspan=2>Dat
7d50: 61 74 79 70 65 0a 20 20 20 20 3c 74 68 20 63 6f  atype.    <th co
7d60: 6c 73 70 61 6e 3d 34 3e 41 70 70 65 61 72 73 20  lspan=4>Appears 
7d70: 69 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f  in....    <th ro
7d80: 77 73 70 61 6e 3d 32 3e 44 65 73 63 72 69 70 74  wspan=2>Descript
7d90: 69 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c  ion.<tr><th>Tabl
7da0: 65 20 4c 65 61 66 0a 20 20 20 20 3c 74 68 3e 54  e Leaf.    <th>T
7db0: 61 62 6c 65 20 49 6e 74 65 72 69 6f 72 0a 20 20  able Interior.  
7dc0: 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c 65 61 66    <th>Index Leaf
7dd0: 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 49  .    <th>Index I
7de0: 6e 74 65 72 69 6f 72 0a 3c 74 72 3e 3c 74 64 20  nterior.<tr><td 
7df0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
7e00: 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69  ign=top>4-byte i
7e10: 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61  nteger.    <td a
7e20: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7e30: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
7e40: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7e50: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
7e60: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
7e70: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7e80: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
7e90: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7ea0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
7eb0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
7ec0: 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e  lign=left>Page n
7ed0: 75 6d 62 65 72 20 6f 66 20 6c 65 66 74 20 63 68  umber of left ch
7ee0: 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ild.<tr><td alig
7ef0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7f00: 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c  top>varint.    <
7f10: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7f20: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
7f30: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
7f40: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7f50: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
7f60: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7f70: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
7f80: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
7f90: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
7fa0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
7fb0: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
7fc0: 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
7fd0: 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c  of payload.<tr><
7fe0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7ff0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e  valign=top>varin
8000: 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  t.    <td align=
8010: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8020: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8030: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8040: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8050: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8060: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8070: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8080: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8090: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
80a0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
80b0: 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e 3c  left>Rowid.<tr><
80c0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
80d0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65 20  valign=top>byte 
80e0: 61 72 72 61 79 0a 20 20 20 20 3c 74 64 20 61 6c  array.    <td al
80f0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8100: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8110: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8120: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8130: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8140: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8150: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8160: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8170: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8180: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8190: 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c 6f  align=left>Paylo
81a0: 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ad.<tr><td align
81b0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
81c0: 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65  op>4-byte intege
81d0: 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  r.    <td align=
81e0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
81f0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8200: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8210: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
8220: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8230: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8240: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8250: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8260: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8270: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8280: 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62  n=left>Page numb
8290: 65 72 20 6f 66 20 66 69 72 73 74 20 6f 76 65 72  er of first over
82a0: 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62 6c  flow page.</tabl
82b0: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 0a 3c  e></center>....<
82c0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
82d0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 0a  ter valign=top>.
82e0: 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e 74 20 6f  .<p>The amount o
82f0: 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 73  f payload that s
8300: 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65 72 66  pills onto overf
8310: 6c 6f 77 20 70 61 67 65 73 20 61 6c 73 6f 20 64  low pages also d
8320: 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65 20 70 61  epends on.the pa
8330: 67 65 20 74 79 70 65 2e 20 20 46 6f 72 20 74 68  ge type.  For th
8340: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
8350: 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74 20 55 20  utations, let U 
8360: 62 65 20 74 68 65 20 75 73 61 62 6c 65 20 73 69  be the usable si
8370: 7a 65 0a 6f 66 20 61 20 64 61 74 61 62 61 73 65  ze.of a database
8380: 20 70 61 67 65 2c 20 74 68 65 20 74 6f 74 61 6c   page, the total
8390: 20 70 61 67 65 20 73 69 7a 65 20 6c 65 73 73 20   page size less 
83a0: 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61  the reserved spa
83b0: 63 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f 66  ce at the.end of
83c0: 20 65 61 63 68 20 70 61 67 65 2e 20 20 41 6e 64   each page.  And
83d0: 20 6c 65 74 20 50 20 62 65 20 74 68 65 20 70 61   let P be the pa
83e0: 79 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f 70 3e 0a  yload size.</p>.
83f0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c  .<blockquote><dl
8400: 3e 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54 72  >.<dt>Table B-Tr
8410: 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64  ee Leaf Cell:</d
8420: 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49 66 20 74  t>.<dd><p>.^If t
8430: 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20  he payload size 
8440: 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  P is less than o
8450: 72 20 65 71 75 61 6c 20 74 6f 20 55 2d 33 35 20  r equal to U-35 
8460: 74 68 65 6e 0a 74 68 65 20 65 6e 74 69 72 65 20  then.the entire 
8470: 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65  payload is store
8480: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
8490: 6c 65 61 66 20 70 61 67 65 2e 20 20 0a 5e 28 4c  leaf page.  .^(L
84a0: 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a  et M be ((U-12)*
84b0: 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66 20  32/255)-23.  If 
84c0: 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  P is greater tha
84d0: 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74 68 65 20  n U-35.then the 
84e0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 20 73  number of byte s
84f0: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74  tored on the b-t
8500: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 69 73  ree leaf page is
8510: 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66 0a   the smaller of.
8520: 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 20  M+((P-M)%(U-4)) 
8530: 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e 28 4e 6f  and U-35.)^.^(No
8540: 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f  te that number o
8550: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
8560: 6e 20 74 68 65 20 6c 65 61 66 20 70 61 67 65 20  n the leaf page 
8570: 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68  is never less th
8580: 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64  an M.)^.</p></dd
8590: 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54  >..<dt>Table B-T
85a0: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
85b0: 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a  l:</dt>.<dd><p>.
85c0: 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73 20 6f  Interior pages o
85d0: 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  f table b-trees 
85e0: 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20  have no payload 
85f0: 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69 73 20  and so there is 
8600: 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61  never.any payloa
8610: 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e  d to spill..</p>
8620: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64 65 78  </dd>..<dt>Index
8630: 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20   B-Tree Leaf Or 
8640: 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f  Interior Cell:</
8650: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65  dt>.<dd><p>.^(Le
8660: 74 20 58 20 62 65 20 28 28 55 2d 31 32 29 2a 36  t X be ((U-12)*6
8670: 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49 66 20  4/255)-23).  If 
8680: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
8690: 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a   P is less than.
86a0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68  or equal to X th
86b0: 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  en the entire pa
86c0: 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20  yload is stored 
86d0: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
86e0: 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65  ge.)^.^(Let M be
86f0: 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29   ((U-12)*32/255)
8700: 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20 67 72  -23.  If P is gr
8710: 65 61 74 65 72 20 74 68 61 6e 20 58 20 74 68 65  eater than X the
8720: 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20  n the number.of 
8730: 62 79 74 65 20 73 74 6f 72 65 64 20 6f 6e 20 74  byte stored on t
8740: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 69  he b-tree page i
8750: 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66  s the smaller of
8760: 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29  .M+((P-M)%(U-4))
8770: 20 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e 6f 74 65   and X.)^.^(Note
8780: 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f 66 20   that number of 
8790: 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20  bytes stored on 
87a0: 74 68 65 20 69 6e 64 65 78 20 70 61 67 65 20 69  the index page i
87b0: 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61  s never less tha
87c0: 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e  n M.)^.</p></dd>
87d0: 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  .</dl></blockquo
87e0: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72  te>..<p>The over
87f0: 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20  flow thresholds 
8800: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
8810: 67 69 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66  give a minimum f
8820: 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69  anout of.4 for i
8830: 6e 64 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64  ndex b-trees and
8840: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e   to make sure en
8850: 6f 75 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c  ough of the payl
8860: 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d  oad.is on the b-
8870: 74 72 65 65 20 70 61 67 65 20 74 68 61 74 20 74  tree page that t
8880: 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72  he record header
8890: 20 63 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20   can usually be 
88a0: 61 63 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74  accessed.without
88b0: 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f   consulting an o
88c0: 76 65 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49  verflow page.  I
88d0: 6e 20 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65  n hindsight, the
88e0: 20 64 65 73 69 67 6e 65 72 73 20 6f 66 0a 74 68   designers of.th
88f0: 65 20 53 51 4c 69 74 65 20 62 2d 74 72 65 65 20  e SQLite b-tree 
8900: 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65 20 74 68  logic realize th
8910: 61 74 20 74 68 65 73 65 20 74 68 72 65 73 68 6f  at these thresho
8920: 6c 64 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62  lds could have b
8930: 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69  een.made much si
8940: 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c  mpler.  However,
8950: 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e   the computation
8960: 73 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e  s cannot be chan
8970: 67 65 64 0a 77 69 74 68 6f 75 74 20 72 65 73 75  ged.without resu
8980: 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f  lting in an inco
8990: 6d 70 61 74 69 62 6c 65 20 66 69 6c 65 20 66 6f  mpatible file fo
89a0: 72 6d 61 74 2e 20 20 41 6e 64 20 74 68 65 20 63  rmat.  And the c
89b0: 75 72 72 65 6e 74 20 63 6f 6d 70 75 74 61 74 69  urrent computati
89c0: 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65  ons.work well, e
89d0: 76 65 6e 20 69 66 20 74 68 65 79 20 61 72 65 20  ven if they are 
89e0: 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78  a little complex
89f0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
8a00: 72 61 67 6d 65 6e 74 20 6f 76 66 6c 70 67 73 20  ragment ovflpgs 
8a10: 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 7d 20  {overflow page} 
8a20: 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 7d  {overflow pages}
8a30: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 36 20 43  </tcl>.<h3>1.6 C
8a40: 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76 65 72  ell Payload Over
8a50: 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68 33 3e 0a  flow Pages</h3>.
8a60: 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 70 61  .<p>^When the pa
8a70: 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74 72 65  yload of a b-tre
8a80: 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20 6c 61  e cell is too la
8a90: 72 67 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72  rge for the b-tr
8aa0: 65 65 20 70 61 67 65 2c 0a 74 68 65 20 73 75 72  ee page,.the sur
8ab0: 70 6c 75 73 20 69 73 20 73 70 69 6c 6c 65 64 20  plus is spilled 
8ac0: 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61  onto overflow pa
8ad0: 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c 6f 77 20  ges.  ^Overflow 
8ae0: 70 61 67 65 73 20 66 6f 72 6d 20 61 20 6c 69 6e  pages form a lin
8af0: 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54 68 65 20  ked.list.  ^The 
8b00: 66 69 72 73 74 20 66 6f 75 72 20 62 79 74 65 73  first four bytes
8b10: 20 6f 66 20 65 61 63 68 20 6f 76 65 72 66 6c 6f   of each overflo
8b20: 77 20 70 61 67 65 20 61 72 65 20 61 20 62 69 67  w page are a big
8b30: 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65 72 20  -endian.integer 
8b40: 77 68 69 63 68 20 69 73 20 74 68 65 20 70 61 67  which is the pag
8b50: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
8b60: 6e 65 78 74 20 70 61 67 65 20 69 6e 20 74 68 65  next page in the
8b70: 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a   chain, or zero.
8b80: 66 6f 72 20 74 68 65 20 66 69 6e 61 6c 20 70 61  for the final pa
8b90: 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e  ge in the chain.
8ba0: 20 20 5e 54 68 65 20 66 69 66 74 68 20 62 79 74    ^The fifth byt
8bb0: 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 61  e through the la
8bc0: 73 74 20 75 73 61 62 6c 65 0a 62 79 74 65 20 61  st usable.byte a
8bd0: 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  re used to hold 
8be0: 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65 6e 74  overflow content
8bf0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 37 20 50  .</p>..<h3>1.7 P
8c00: 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50 74  ointer Map or Pt
8c10: 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 33 3e 0a  rmap Pages</h3>.
8c20: 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70 20  .<p>Pointer map 
8c30: 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65 73 20  or ptrmap pages 
8c40: 61 72 65 20 65 78 74 72 61 20 70 61 67 65 73 20  are extra pages 
8c50: 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68  inserted into th
8c60: 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d 61  e database.to ma
8c70: 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ke the operation
8c80: 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d   of [auto_vacuum
8c90: 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74  ] and [increment
8ca0: 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73  al_vacuum] modes
8cb0: 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74 2e  .more efficient.
8cc0: 20 20 4f 74 68 65 72 20 70 61 67 65 20 74 79 70    Other page typ
8cd0: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
8ce0: 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61 76  se typically hav
8cf0: 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d 20  e pointers.from 
8d00: 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64 2e  parent to child.
8d10: 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61    For example, a
8d20: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
8d30: 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  e page contains 
8d40: 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73 20  pointers.to its 
8d50: 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67  child b-tree pag
8d60: 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66 6c  es and an overfl
8d70: 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61 20 70  ow chain has a p
8d80: 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72 6c  ointer.from earl
8d90: 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69 6e  ier to later lin
8da0: 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e  ks in the chain.
8db0: 20 20 41 20 70 74 72 6d 61 70 20 70 61 67 65 20    A ptrmap page 
8dc0: 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67 65  contains linkage
8dd0: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f 69  .information goi
8de0: 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73 69  ng in the opposi
8df0: 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66 72  te direction, fr
8e00: 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65  om child to pare
8e10: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72  nt.</p>..<p>^Ptr
8e20: 6d 61 70 20 70 61 67 65 73 20 6d 75 73 74 20 65  map pages must e
8e30: 78 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74 61  xist in any data
8e40: 62 61 73 65 20 66 69 6c 65 20 77 68 69 63 68 20  base file which 
8e50: 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c  has a non-zero.l
8e60: 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72  argest root b-tr
8e70: 65 65 20 70 61 67 65 20 76 61 6c 75 65 20 61 74  ee page value at
8e80: 20 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74 68   offset 52 in th
8e90: 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
8ea0: 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72 67 65  r..^If the large
8eb0: 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  st root b-tree p
8ec0: 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72  age value is zer
8ed0: 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  o, then the data
8ee0: 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63 6f  base must not.co
8ef0: 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67  ntain ptrmap pag
8f00: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20  es.</p>..<p>^In 
8f10: 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20  a database with 
8f20: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74 68  ptrmap pages, th
8f30: 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20 70  e first ptrmap p
8f40: 61 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a 41  age is page 2..A
8f50: 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e   ptrmap page con
8f60: 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61  sists of an arra
8f70: 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72  y of 5-byte entr
8f80: 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20 74  ies.  Let J be t
8f90: 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d 62  he.number of 5-b
8fa0: 79 74 65 20 65 6e 74 72 69 65 73 20 74 68 61 74  yte entries that
8fb0: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65   will fit in the
8fc0: 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f 66   usable space of
8fd0: 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74 68   a page..(In oth
8fe0: 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e  er words, J=U/5.
8ff0: 29 20 20 5e 54 68 65 20 66 69 72 73 74 20 70 74  )  ^The first pt
9000: 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20 63  rmap page will c
9010: 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69 6e  ontain back poin
9020: 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ter.information 
9030: 66 6f 72 20 70 61 67 65 73 20 33 20 74 68 72 6f  for pages 3 thro
9040: 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73 69  ugh J+2, inclusi
9050: 76 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64  ve.  ^The second
9060: 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61 67   pointer map.pag
9070: 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61 67  e will be on pag
9080: 65 20 4a 2b 33 20 61 6e 64 20 74 68 61 74 20 70  e J+3 and that p
9090: 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20  trmap page will 
90a0: 70 72 6f 76 69 64 65 20 62 61 63 6b 20 70 6f 69  provide back poi
90b0: 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  nter.information
90c0: 20 66 6f 72 20 70 61 67 65 73 20 4a 2b 34 20 74   for pages J+4 t
90d0: 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e 63  hrough 2*J+3 inc
90e0: 6c 75 73 69 76 65 2e 20 20 41 6e 64 20 73 6f 20  lusive.  And so 
90f0: 66 6f 72 74 68 20 66 6f 72 0a 74 68 65 20 65 6e  forth for.the en
9100: 74 69 72 65 20 64 61 74 61 62 61 73 65 20 66 69  tire database fi
9110: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e  le.</p>..<p>^(In
9120: 20 61 20 64 61 74 61 62 61 73 65 20 74 68 61 74   a database that
9130: 20 75 73 65 73 20 70 74 72 6d 61 70 20 70 61 67   uses ptrmap pag
9140: 65 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61 74  es, all pages at
9150: 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e 74   locations ident
9160: 69 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f 6d  ified.by the com
9170: 70 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65 20  putation in the 
9180: 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61  previous paragra
9190: 70 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d 61  ph must be ptrma
91a0: 70 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f 74  p page and no.ot
91b0: 68 65 72 20 70 61 67 65 20 6d 61 79 20 62 65 20  her page may be 
91c0: 61 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20 20  a ptrmap page.  
91d0: 45 78 63 65 70 74 2c 20 69 66 20 74 68 65 20 62  Except, if the b
91e0: 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68 61  yte-lock page ha
91f0: 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e  ppens to.fall on
9200: 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20 6e   the same page n
9210: 75 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d 61  umber as a ptrma
9220: 70 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68 65  p page, then the
9230: 20 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65 64   ptrmap is moved
9240: 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  .to the followin
9250: 67 20 70 61 67 65 20 66 6f 72 20 74 68 61 74 20  g page for that 
9260: 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a  one case.)^</p>.
9270: 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20  .<p>Each 5-byte 
9280: 65 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d 61  entry on a ptrma
9290: 70 20 70 61 67 65 20 70 72 6f 76 69 64 65 73 20  p page provides 
92a0: 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d  back-link inform
92b0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e 65  ation about .one
92c0: 20 6f 66 20 70 61 67 65 73 20 74 68 61 74 20 69   of pages that i
92d0: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
92e0: 77 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61  w the pointer ma
92f0: 70 2e 20 20 5e 28 49 66 20 70 61 67 65 20 42 20  p.  ^(If page B 
9300: 69 73 20 61 0a 70 74 72 6d 61 70 20 70 61 67 65  is a.ptrmap page
9310: 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20   then back-link 
9320: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
9330: 74 20 70 61 67 65 20 42 2b 31 20 69 73 20 70 72  t page B+1 is pr
9340: 6f 76 69 64 65 64 20 62 79 0a 74 68 65 20 66 69  ovided by.the fi
9350: 72 73 74 20 65 6e 74 72 79 20 6f 6e 20 74 68 65  rst entry on the
9360: 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 49   pointer map.  I
9370: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
9380: 20 70 61 67 65 20 42 2b 32 20 69 73 0a 70 72 6f   page B+2 is.pro
9390: 76 69 64 65 64 20 62 79 20 74 68 65 20 73 65 63  vided by the sec
93a0: 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e 64 20  ond entry.  And 
93b0: 73 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70 3e 0a  so forth.)^</p>.
93c0: 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20  .<p>Each 5-byte 
93d0: 70 74 72 6d 61 70 20 65 6e 74 72 79 20 63 6f 6e  ptrmap entry con
93e0: 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 62 79 74  sists of one byt
93f0: 65 20 6f 66 20 22 70 61 67 65 20 74 79 70 65 22  e of "page type"
9400: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c   information.fol
9410: 6c 6f 77 65 64 20 62 79 20 61 20 34 2d 62 79 74  lowed by a 4-byt
9420: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67  e big-endian pag
9430: 65 20 6e 75 6d 62 65 72 2e 20 20 46 69 76 65 20  e number.  Five 
9440: 70 61 67 65 20 74 79 70 65 73 20 61 72 65 20 72  page types are r
9450: 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a  ecognized:.</p>.
9460: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72  .<ol>.<li>A b-tr
9470: 65 65 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 54  ee root page.  T
9480: 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 73  he.page number s
9490: 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e 0a 3c  hould be zero..<
94a0: 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70 61  li>A freelist pa
94b0: 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75  ge.  The page nu
94c0: 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 7a  mber should be.z
94d0: 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66 69 72  ero..<li>The fir
94e0: 73 74 20 70 61 67 65 20 6f 66 20 61 0a 63 65 6c  st page of a.cel
94f0: 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c  l payload overfl
9500: 6f 77 20 63 68 61 69 6e 2e 20 20 54 68 65 20 70  ow chain.  The p
9510: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68  age number is th
9520: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68  e b-tree page th
9530: 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at.contains the 
9540: 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e 74 65  cell whose conte
9550: 6e 74 20 68 61 73 20 6f 76 65 72 66 6c 6f 77 65  nt has overflowe
9560: 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20 69 6e  d..<li>A page in
9570: 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61   an overflow cha
9580: 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20 74 68  in.other than th
9590: 65 20 66 69 72 73 74 20 70 61 67 65 2e 20 20 54  e first page.  T
95a0: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
95b0: 73 20 74 68 65 20 70 72 69 6f 72 20 70 61 67 65  s the prior page
95c0: 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77   of the.overflow
95d0: 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f   chain..<li>A no
95e0: 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  n-root b-tree pa
95f0: 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75  ge.  The.page nu
9600: 6d 62 65 72 20 69 73 20 74 68 65 20 70 61 72 65  mber is the pare
9610: 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  nt b-tree page..
9620: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 6e  </ol>..<p>^In an
9630: 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
9640: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 70 74  that contains pt
9650: 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20  rmap pages, all 
9660: 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65  b-tree root page
9670: 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62 65 66  s .must come bef
9680: 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74  ore any non-root
9690: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 63 65   b-tree page, ce
96a0: 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66  ll payload overf
96b0: 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66 72 65  low page, or.fre
96c0: 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 69  elist page.  Thi
96d0: 73 20 72 65 73 74 72 69 63 74 69 6f 6e 20 65 6e  s restriction en
96e0: 73 75 72 65 73 20 74 68 61 74 20 61 20 72 6f 6f  sures that a roo
96f0: 74 20 70 61 67 65 20 77 69 6c 6c 20 6e 65 76 65  t page will neve
9700: 72 0a 62 65 20 6d 6f 76 65 64 20 64 75 72 69 6e  r.be moved durin
9710: 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  g an auto-vacuum
9720: 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 2d   or incremental-
9730: 76 61 63 75 75 6d 2e 20 20 54 68 65 20 61 75 74  vacuum.  The aut
9740: 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63 20 64  o-vacuum.logic d
9750: 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 68 6f 77  oes not know how
9760: 20 74 6f 20 75 70 64 61 74 65 20 74 68 65 20 72   to update the r
9770: 6f 6f 74 5f 70 61 67 65 20 66 69 65 6c 64 20 6f  oot_page field o
9780: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  f the sqlite_mas
9790: 74 65 72 0a 74 61 62 6c 65 20 61 6e 64 20 73 6f  ter.table and so
97a0: 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
97b0: 20 74 6f 20 70 72 65 76 65 6e 74 20 72 6f 6f 74   to prevent root
97c0: 20 70 61 67 65 73 20 66 72 6f 6d 20 62 65 69 6e   pages from bein
97d0: 67 20 6d 6f 76 65 64 0a 64 75 72 69 6e 67 20 61  g moved.during a
97e0: 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 69 6e  n auto-vacuum in
97f0: 20 6f 72 64 65 72 20 74 6f 20 70 72 65 73 65 72   order to preser
9800: 76 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  ve the integrity
9810: 20 6f 66 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d   of the.sqlite_m
9820: 61 73 74 65 72 20 74 61 62 6c 65 2e 20 20 5e 52  aster table.  ^R
9830: 6f 6f 74 20 70 61 67 65 73 20 61 72 65 20 6d 6f  oot pages are mo
9840: 76 65 64 20 74 6f 20 74 68 65 20 62 65 67 69 6e  ved to the begin
9850: 6e 69 6e 67 20 6f 66 20 74 68 65 0a 64 61 74 61  ning of the.data
9860: 62 61 73 65 20 66 69 6c 65 20 62 79 20 74 68 65  base file by the
9870: 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 43   CREATE TABLE, C
9880: 52 45 41 54 45 20 49 4e 44 45 58 2c 20 44 52 4f  REATE INDEX, DRO
9890: 50 20 54 41 42 4c 45 2c 20 61 6e 64 0a 44 52 4f  P TABLE, and.DRO
98a0: 50 20 49 4e 44 45 58 20 6f 70 65 72 61 74 69 6f  P INDEX operatio
98b0: 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 32 2e 30  ns.</p>..<h2>2.0
98c0: 20 53 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f 68   Schema Layer</h
98d0: 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65 67  2>..<p>The foreg
98e0: 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63 72 69  oing text descri
98f0: 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61 73  bes low-level as
9900: 70 65 63 74 73 20 6f 66 20 74 68 65 20 53 51 4c  pects of the SQL
9910: 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74 2e  ite file.format.
9920: 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d 65 63    The b-tree mec
9930: 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65 73 20  hanism provides 
9940: 61 20 70 6f 77 65 72 66 75 6c 20 61 6e 64 20 65  a powerful and e
9950: 66 66 69 63 69 65 6e 74 20 6d 65 61 6e 73 20 6f  fficient means o
9960: 66 0a 61 63 63 65 73 73 69 6e 67 20 61 20 6c 61  f.accessing a la
9970: 72 67 65 20 64 61 74 61 20 73 65 74 2e 20 20 54  rge data set.  T
9980: 68 69 73 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c  his section will
9990: 20 64 65 73 63 72 69 62 65 20 68 6f 77 20 74 68   describe how th
99a0: 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72  e.low-level b-tr
99b0: 65 65 20 6c 61 79 65 72 20 69 73 20 75 73 65 64  ee layer is used
99c0: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68 69   to implement hi
99d0: 67 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a 63  gher-level SQL.c
99e0: 61 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70 3e  apabilities.</p>
99f0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
9a00: 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61 74  nt record_format
9a10: 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 7d   {record format}
9a20: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e 31 20 52  </tcl>.<h3>2.1 R
9a30: 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 68 33  ecord Format</h3
9a40: 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e 74 65 6e  >..<p>The conten
9a50: 74 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74  t of a table b-t
9a60: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e  ree leaf page an
9a70: 64 20 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 79  d the key.of any
9a80: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61   index b-tree pa
9a90: 67 65 20 77 61 73 20 63 68 61 72 61 63 74 65 72  ge was character
9aa0: 69 7a 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e  ized above.as an
9ab0: 20 61 72 62 69 74 72 61 72 79 20 73 65 71 75 65   arbitrary seque
9ac0: 6e 63 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68  nce of bytes..Th
9ad0: 65 20 70 72 69 6f 72 20 64 69 73 63 75 73 73 69  e prior discussi
9ae0: 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65  on mentioned one
9af0: 20 6b 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20   key being less 
9b00: 74 68 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75  than another, bu
9b10: 74 0a 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65  t.did not define
9b20: 20 77 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e   what "less than
9b30: 22 20 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75  " meant.  The cu
9b40: 72 72 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69  rrent section wi
9b50: 6c 6c 20 61 64 64 72 65 73 73 0a 74 68 65 73 65  ll address.these
9b60: 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a   omissions.</p>.
9b70: 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69 74  .<p>Payload, eit
9b80: 68 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  her table conten
9b90: 74 20 6f 72 20 69 6e 64 65 78 20 6b 65 79 73 2c  t or index keys,
9ba0: 20 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74 68   is always in th
9bb0: 65 20 22 72 65 63 6f 72 64 0a 66 6f 72 6d 61 74  e "record.format
9bc0: 22 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20 66  ".  The record f
9bd0: 6f 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20  ormat defines a 
9be0: 73 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75  sequence of valu
9bf0: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
9c00: 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61  .to columns in a
9c10: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
9c20: 20 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72    The record for
9c30: 6d 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  mat specifies th
9c40: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75  e number.of colu
9c50: 6d 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79 70  mns, the datatyp
9c60: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
9c70: 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  , and the conten
9c80: 74 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  t of each column
9c90: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
9ca0: 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b 65  cord format make
9cb0: 73 20 65 78 74 65 6e 73 69 76 65 20 75 73 65 20  s extensive use 
9cc0: 6f 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62 6c  of the .[variabl
9cd0: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
9ce0: 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72 65  ] or [varint].re
9cf0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
9d00: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
9d10: 74 65 67 65 72 73 20 64 65 66 69 6e 65 64 20 61  tegers defined a
9d20: 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  bove.</p>..<tcl>
9d30: 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72 69  hd_fragment seri
9d40: 61 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20 74  altype {serial t
9d50: 79 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79 70  ype} {serial typ
9d60: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72  es}</tcl>.<p>A r
9d70: 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 61  ecord contains a
9d80: 20 68 65 61 64 65 72 20 61 6e 64 20 61 20 62 6f   header and a bo
9d90: 64 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64 65  dy, in that orde
9da0: 72 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64 65  r.  .^(The heade
9db0: 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
9dc0: 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77 68  single varint wh
9dd0: 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74  ich determines t
9de0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 0a  he total number.
9df0: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
9e00: 68 65 61 64 65 72 2e 20 20 54 68 65 20 76 61 72  header.  The var
9e10: 69 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68 65  int value is the
9e20: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   size of the hea
9e30: 64 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e 63  der in.bytes inc
9e40: 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20  luding the size 
9e50: 76 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29 5e  varint itself.)^
9e60: 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65    ^Following the
9e70: 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
9e80: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64 64  .one or more add
9e90: 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
9ea0: 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
9eb0: 20 20 54 68 65 73 65 20 61 64 64 69 74 69 6f 6e    These addition
9ec0: 61 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20 63  al varints.are c
9ed0: 61 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74 79  alled "serial ty
9ee0: 70 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a  pe" numbers and.
9ef0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 61  determine the da
9f00: 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  tatype of each c
9f10: 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67  olumn, according
9f20: 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
9f30: 67 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63  g chart:</p>..<c
9f40: 65 6e 74 65 72 3e 0a 5e 28 3c 69 3e 53 65 72 69  enter>.^(<i>Seri
9f50: 61 6c 20 54 79 70 65 20 43 6f 64 65 73 20 4f 66  al Type Codes Of
9f60: 20 54 68 65 20 52 65 63 6f 72 64 20 46 6f 72 6d   The Record Form
9f70: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
9f80: 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
9f90: 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
9fa0: 53 65 72 69 61 6c 20 54 79 70 65 3c 74 68 3e 43  Serial Type<th>C
9fb0: 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d  ontent Size<th>M
9fc0: 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76  eaning.<tr><td v
9fd0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
9fe0: 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
9ff0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a000: 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>0<td align=l
a010: 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74 72 3e 3c 74  eft>.NULL.<tr><t
a020: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a030: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 76  gn=center>1<td v
a040: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a050: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
a060: 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69 74 20 74 77  n=left>.8-bit tw
a070: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
a080: 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  teger.<tr><td va
a090: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a0a0: 65 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67  enter>2<td valig
a0b0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a0c0: 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>2<td align=le
a0d0: 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 31  ft>.Big-endian 1
a0e0: 36 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  6-bit twos-compl
a0f0: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74  ement integer.<t
a100: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a110: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c   align=center>3<
a120: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a130: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20  ign=center>3<td 
a140: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d  align=left>.Big-
a150: 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20 74 77  endian 24-bit tw
a160: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
a170: 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  teger.<tr><td va
a180: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a190: 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67  enter>4<td valig
a1a0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a1b0: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
a1c0: 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 33  ft>.Big-endian 3
a1d0: 32 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  2-bit twos-compl
a1e0: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74  ement integer.<t
a1f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a200: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c   align=center>5<
a210: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a220: 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20  ign=center>6<td 
a230: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d  align=left>.Big-
a240: 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20 74 77  endian 48-bit tw
a250: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
a260: 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  teger.<tr><td va
a270: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a280: 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c 69 67  enter>6<td valig
a290: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a2a0: 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>8<td align=le
a2b0: 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 36  ft>.Big-endian 6
a2c0: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
a2d0: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74  ement integer.<t
a2e0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
a2f0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 3c   align=center>7<
a300: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a310: 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20  ign=center>8<td 
a320: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d  align=left>.Big-
a330: 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d  endian IEEE 754-
a340: 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61  2008 64-bit floa
a350: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
a360: 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
a370: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a380: 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>8<td valign=to
a390: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
a3a0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a3b0: 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e 74  Integer constant
a3c0: 20 30 2e 20 20 4f 6e 6c 79 20 61 76 61 69 6c 61   0.  Only availa
a3d0: 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61 20 66  ble for schema f
a3e0: 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69 67 68  ormat 4 and high
a3f0: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
a400: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a410: 74 65 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>9<td valign=
a420: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a430: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >0<td align=left
a440: 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61  >.Integer consta
a450: 6e 74 20 31 2e 20 20 4f 6e 6c 79 20 61 76 61 69  nt 1.  Only avai
a460: 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61  lable for schema
a470: 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69   format 4 and hi
a480: 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  gher..<tr><td va
a490: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a4a0: 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20 20  enter>10,11.    
a4b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a4c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62 73  lign=center>&nbs
a4d0: 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  p;<td align=left
a4e0: 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20 20  >.<i>Not used.  
a4f0: 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78 70  Reserved for exp
a500: 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e  ansion.</i>.<tr>
a510: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a520: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78  lign=center>N&#x
a530: 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76 65 6e  2265;12 and even
a540: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
a550: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a560: 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c 69  >(N-12)/2<td ali
a570: 67 6e 3d 6c 65 66 74 3e 0a 41 20 42 4c 4f 42 20  gn=left>.A BLOB 
a580: 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f 32  that is (N-12)/2
a590: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
a5a0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
a5b0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a5c0: 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61 6e 64  >N&#x2265;13 and
a5d0: 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76 61 6c   odd.    <td val
a5e0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a5f0: 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74 64  nter>(N-13)/2<td
a600: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 73   align=left>.A s
a610: 74 72 69 6e 67 20 69 6e 20 74 68 65 20 64 61 74  tring in the dat
a620: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 61  abase encoding a
a630: 6e 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65  nd (N-13)/2 byte
a640: 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 54 68 65  s in length..The
a650: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
a660: 69 73 20 6f 6d 69 74 74 65 64 2e 0a 3c 2f 74 61  is omitted..</ta
a670: 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  ble></center>)^.
a680: 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 62 65  .<p>Note that be
a690: 63 61 75 73 65 20 6f 66 20 74 68 65 20 77 61 79  cause of the way
a6a0: 20 76 61 72 69 6e 74 73 20 61 72 65 20 64 65 66   varints are def
a6b0: 69 6e 65 64 2c 20 74 68 65 20 68 65 61 64 65 72  ined, the header
a6c0: 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e 64   size varint.and
a6d0: 20 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72   serial type var
a6e0: 69 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c 6c  ints will usuall
a6f0: 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 73  y consist of a s
a700: 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
a710: 0a 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72  .serial type var
a720: 69 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20 73  ints for large s
a730: 74 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 73  trings and BLOBs
a740: 20 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74 6f   might extend to
a750: 20 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62 79   two or three.by
a760: 74 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74 20  te varints, but 
a770: 74 68 61 74 20 69 73 20 74 68 65 20 65 78 63 65  that is the exce
a780: 70 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68 61  ption rather tha
a790: 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68 65  n the rule. .The
a7a0: 20 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20 69   varint format i
a7b0: 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
a7c0: 20 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20 72   at coding the r
a7d0: 65 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f 70  ecord header.</p
a7e0: 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 73  >..<p>The values
a7f0: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
a800: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
a810: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
a820: 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a 5e 28  w the header..^(
a830: 4e 6f 74 65 20 74 68 61 74 20 66 6f 72 20 73 65  Note that for se
a840: 72 69 61 6c 20 74 79 70 65 73 20 30 2c 20 38 2c  rial types 0, 8,
a850: 20 39 2c 20 31 32 2c 20 61 6e 64 20 31 33 2c 20   9, 12, and 13, 
a860: 74 68 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72  the value is zer
a870: 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65 6e 67 74  o bytes in.lengt
a880: 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f 6c 75 6d  h.  If all colum
a890: 6e 73 20 61 72 65 20 6f 66 20 74 68 65 73 65 20  ns are of these 
a8a0: 74 79 70 65 73 20 74 68 65 6e 20 74 68 65 20 62  types then the b
a8b0: 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f 66 20 74  ody section of t
a8c0: 68 65 0a 72 65 63 6f 72 64 20 69 73 20 65 6d 70  he.record is emp
a8d0: 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32  ty.)^</p>..<h3>2
a8e0: 2e 32 20 52 65 63 6f 72 64 20 53 6f 72 74 20 4f  .2 Record Sort O
a8f0: 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  rder</h3>..<p>Th
a900: 65 20 6f 72 64 65 72 20 6f 66 20 6b 65 79 73 20  e order of keys 
a910: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
a920: 65 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ee is determined
a930: 20 62 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64   by the sort ord
a940: 65 72 20 6f 66 0a 74 68 65 20 72 65 63 6f 72 64  er of.the record
a950: 73 20 74 68 61 74 20 74 68 65 20 6b 65 79 73 20  s that the keys 
a960: 72 65 70 72 65 73 65 6e 74 2e 20 20 52 65 63 6f  represent.  Reco
a970: 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e 20 70 72  rd comparison pr
a980: 6f 67 72 65 73 73 65 73 20 63 6f 6c 75 6d 6e 0a  ogresses column.
a990: 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75  by column.  Colu
a9a0: 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f 72 64 20  mns of a record 
a9b0: 61 72 65 20 65 78 61 6d 69 6e 65 64 20 66 72 6f  are examined fro
a9c0: 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e  m left to right.
a9d0: 20 20 54 68 65 0a 66 69 72 73 74 20 70 61 69 72    The.first pair
a9e0: 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74   of columns that
a9f0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 64   are not equal d
aa00: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 72 65  etermines the re
aa10: 6c 61 74 69 76 65 20 6f 72 64 65 72 0a 6f 66 20  lative order.of 
aa20: 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 2e  the two records.
aa30: 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72    The sort order
aa40: 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20 63   of individual c
aa50: 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66 6f 6c  olumns is as.fol
aa60: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  lows:</p>..<ol>.
aa70: 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76 61 6c 75 65  <li>^(NULL value
aa80: 73 20 28 73 65 72 69 61 6c 20 74 79 70 65 20 30  s (serial type 0
aa90: 29 20 73 6f 72 74 20 66 69 72 73 74 2e 29 5e 0a  ) sort first.)^.
aaa0: 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69 63 20 76 61  <li>^(Numeric va
aab0: 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70  lues (serial typ
aac0: 65 73 20 31 20 74 68 72 6f 75 67 68 20 39 29 20  es 1 through 9) 
aad0: 73 6f 72 74 20 61 66 74 65 72 20 4e 55 4c 4c 73  sort after NULLs
aae0: 0a 20 20 20 20 20 20 61 6e 64 20 69 6e 20 6e 75  .      and in nu
aaf0: 6d 65 72 69 63 20 6f 72 64 65 72 2e 29 5e 0a 3c  meric order.)^.<
ab00: 6c 69 3e 5e 28 54 65 78 74 20 76 61 6c 75 65 73  li>^(Text values
ab10: 20 28 6f 64 64 20 73 65 72 69 61 6c 20 74 79 70   (odd serial typ
ab20: 65 73 20 31 33 20 61 6e 64 20 6c 61 72 67 65 72  es 13 and larger
ab30: 29 20 73 6f 72 74 20 61 66 74 65 72 20 6e 75 6d  ) sort after num
ab40: 65 72 69 63 0a 20 20 20 20 76 61 6c 75 65 73 20  eric.    values 
ab50: 69 6e 20 74 68 65 20 6f 72 64 65 72 20 64 65 74  in the order det
ab60: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 63  ermined by the c
ab70: 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e  olumns [collatin
ab80: 67 20 66 75 6e 63 74 69 6f 6e 5d 2e 29 5e 0a 3c  g function].)^.<
ab90: 6c 69 3e 5e 28 42 4c 4f 42 20 76 61 6c 75 65 73  li>^(BLOB values
aba0: 20 28 65 76 65 6e 20 73 65 72 69 61 6c 20 74 79   (even serial ty
abb0: 70 65 73 20 31 32 20 61 6e 64 20 6c 61 72 67 65  pes 12 and large
abc0: 72 29 20 73 6f 72 74 20 6c 61 73 74 20 61 6e 64  r) sort last and
abd0: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 0a 20   in the order . 
abe0: 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79     determined by
abf0: 20 6d 65 6d 63 6d 70 28 29 2e 29 5e 0a 3c 2f 6f   memcmp().)^.</o
ac00: 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74  l>..<p>A [collat
ac10: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 20 66 6f  ing function] fo
ac20: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  r each column is
ac30: 20 6e 65 63 65 73 73 61 72 79 20 69 6e 20 6f 72   necessary in or
ac40: 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74  der to compute.t
ac50: 68 65 20 6f 72 64 65 72 20 6f 66 20 74 65 78 74  he order of text
ac60: 20 66 69 65 6c 64 73 2e 0a 5e 28 53 51 4c 69 74   fields..^(SQLit
ac70: 65 20 64 65 66 69 6e 65 73 20 74 68 72 65 65 20  e defines three 
ac80: 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69  built-in collati
ac90: 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a 29 5e 0a  ng functions:)^.
aca0: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
acb0: 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  e><table border=
acc0: 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 31 30  0 cellspacing=10
acd0: 3e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69 67  >.<tr>^<td valig
ace0: 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a 20 20 20  n=top>BINARY.   
acf0: 20 3c 74 64 3e 53 74 72 69 6e 67 73 20 61 72 65   <td>Strings are
ad00: 20 63 6f 6d 70 61 72 65 64 20 62 79 74 65 20 62   compared byte b
ad10: 79 20 62 79 74 65 20 75 73 69 6e 67 20 74 68 65  y byte using the
ad20: 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74 69   memcmp() functi
ad30: 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f 6d 20  on.        from 
ad40: 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
ad50: 69 62 72 61 72 79 2e 0a 3c 74 72 3e 5e 3c 74 64  ibrary..<tr>^<td
ad60: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41   valign=top>NOCA
ad70: 53 45 0a 20 20 20 20 3c 74 64 3e 4c 69 6b 65 20  SE.    <td>Like 
ad80: 42 49 4e 41 52 59 20 65 78 63 65 70 74 20 74 68  BINARY except th
ad90: 61 74 20 75 70 70 65 72 63 61 73 65 20 41 53 43  at uppercase ASC
ada0: 49 49 20 63 68 61 72 61 63 74 65 72 73 20 28 27  II characters ('
adb0: 41 27 20 74 68 72 6f 75 67 68 20 27 5a 27 29 0a  A' through 'Z').
adc0: 20 20 20 20 20 20 20 20 61 72 65 20 66 6f 6c 64          are fold
add0: 65 64 20 69 6e 74 6f 20 74 68 65 69 72 20 6c 6f  ed into their lo
ade0: 77 65 72 63 61 73 65 20 65 71 75 69 76 61 6c 65  wercase equivale
adf0: 6e 74 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e  nts prior to run
ae00: 6e 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20  ning the.       
ae10: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4e 6f   comparison.  No
ae20: 74 65 20 74 68 61 74 20 6f 6e 6c 79 20 41 53 43  te that only ASC
ae30: 49 49 20 63 68 61 72 61 63 74 65 72 73 20 61 72  II characters ar
ae40: 65 20 63 61 73 65 2d 66 6f 6c 64 65 64 2e 20 20  e case-folded.  
ae50: 5e 4e 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20  ^NOCASE.        
ae60: 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65  does not impleme
ae70: 6e 74 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72  nt a general pur
ae80: 70 6f 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73  pose unicode cas
ae90: 65 6c 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e  eless comparison
aea0: 2e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69 67  ..<tr>^<td valig
aeb0: 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20  n=top>RTRIM.    
aec0: 3c 74 64 3e 4c 69 6b 65 20 42 49 4e 41 52 59 20  <td>Like BINARY 
aed0: 65 78 63 65 70 74 20 74 68 61 74 20 73 70 61 63  except that spac
aee0: 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
aef0: 20 74 68 65 20 73 74 72 69 6e 67 20 61 72 65 20   the string are 
af00: 65 6c 69 64 65 64 0a 20 20 20 20 20 20 20 20 70  elided.        p
af10: 72 69 6f 72 20 74 6f 20 63 6f 6d 70 61 72 69 73  rior to comparis
af20: 6f 6e 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c  on..</table></bl
af30: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41  ockquote>..<p>^A
af40: 64 64 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63  dditional applic
af50: 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63  ation-specific c
af60: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
af70: 6e 73 20 63 61 6e 20 62 65 20 61 64 64 65 64 20  ns can be added 
af80: 74 6f 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20  to.SQLite using 
af90: 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65  the [sqlite3_cre
afa0: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d  ate_collation()]
afb0: 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a   interface.</p>.
afc0: 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74  .<p>^The default
afd0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
afe0: 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69  ion for all stri
aff0: 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e  ngs is BINARY..^
b000: 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c  Alternative coll
b010: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20  ating functions 
b020: 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e  for table column
b030: 73 20 63 61 6e 20 62 65 20 73 70 65 63 69 66 69  s can be specifi
b040: 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54  ed in the.[CREAT
b050: 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65  E TABLE] stateme
b060: 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c  nt using the COL
b070: 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74  LATE clause on t
b080: 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  he [column defin
b090: 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20  ition]..^When a 
b0a0: 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65  column is indexe
b0b0: 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c  d, the same coll
b0c0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
b0d0: 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a  pecified in the.
b0e0: 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73  [CREATE TABLE] s
b0f0: 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64  tatement is used
b100: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
b110: 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79  in the index, by
b120: 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68   default,.though
b130: 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65   this can be ove
b140: 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20  rridden using a 
b150: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69  COLLATE clause i
b160: 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49  n the .[CREATE I
b170: 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e  NDEX] statement.
b180: 0a 0a 3c 68 33 3e 32 2e 33 20 52 65 70 72 65 73  ..<h3>2.3 Repres
b190: 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20  entation Of SQL 
b1a0: 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  Tables</h3>..<p>
b1b0: 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51  Each ordinary SQ
b1c0: 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  L table in the d
b1d0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
b1e0: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e  s represented on
b1f0: 20 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65   disk.by a table
b200: 20 62 2d 74 72 65 65 2e 20 20 45 61 63 68 20 65   b-tree.  Each e
b210: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
b220: 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70  e b-tree corresp
b230: 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66  onds to a row.of
b240: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e 20   the SQL table. 
b250: 20 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20   The [rowid] of 
b260: 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 69 73  the SQL table is
b270: 20 74 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e   the 64-bit sign
b280: 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79 20 66  ed.integer key f
b290: 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e  or each entry in
b2a0: 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65   the table b-tre
b2b0: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63  e.</p>..<p>The c
b2c0: 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53  ontent of each S
b2d0: 51 4c 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  QL table row is 
b2e0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
b2f0: 74 61 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66  tabase file by.f
b300: 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74  irst combining t
b310: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  he values in the
b320: 20 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73   various columns
b330: 20 69 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72   into a byte arr
b340: 61 79 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ay.in the record
b350: 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74   format, then st
b360: 6f 72 69 6e 67 20 74 68 61 74 20 62 79 74 65 20  oring that byte 
b370: 61 72 72 61 79 20 61 73 20 74 68 65 20 70 61 79  array as the pay
b380: 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79  load in.an entry
b390: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
b3a0: 74 72 65 65 2e 20 20 5e 54 68 65 20 6f 72 64 65  tree.  ^The orde
b3b0: 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74  r of values in t
b3c0: 68 65 20 72 65 63 6f 72 64 20 69 73 0a 74 68 65  he record is.the
b3d0: 20 73 61 6d 65 20 61 73 20 74 68 65 20 6f 72 64   same as the ord
b3e0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
b3f0: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 64   the SQL table d
b400: 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e  efinition..^When
b410: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 74 68   an SQL table th
b420: 61 74 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b  at includes an.[
b430: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
b440: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69  KEY] column (whi
b450: 63 68 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b  ch aliases the [
b460: 72 6f 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61  rowid]) then tha
b470: 74 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73  t.column appears
b480: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
b490: 73 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20  s a NULL value. 
b4a0: 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c   ^SQLite will al
b4b0: 77 61 79 73 20 75 73 65 0a 74 68 65 20 74 61 62  ways use.the tab
b4c0: 6c 65 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61  le b-tree key ra
b4d0: 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55  ther than the NU
b4e0: 4c 4c 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65  LL value when re
b4f0: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49  ferencing the.[I
b500: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
b510: 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a  EY] column.</p>.
b520: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 5b 61 66 66  .<p>^If the [aff
b530: 69 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75  inity] of a colu
b540: 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74  mn is REAL and t
b550: 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  hat column conta
b560: 69 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74  ins a.value that
b570: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65   can be converte
b580: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
b590: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
b5a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20  information.(if 
b5b0: 74 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  the value contai
b5c0: 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c  ns no fractional
b5d0: 20 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74   part and is not
b5e0: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65   too large to be
b5f0: 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20  .represented as 
b600: 61 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e  an integer) then
b610: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20   the column may 
b620: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  be stored in the
b630: 20 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e   record.as an in
b640: 74 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20  teger.  ^SQLite 
b650: 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65  will convert the
b660: 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66   value back to f
b670: 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68  loating.point wh
b680: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74  en extracting it
b690: 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
b6a0: 2e 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 32 2e 34 20  .</p>...<h3>2.4 
b6b0: 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f  Representation O
b6c0: 66 20 53 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68  f SQL Indices</h
b6d0: 33 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 53 51 4c  3>..<p>^Each SQL
b6e0: 20 69 6e 64 65 78 2c 20 77 68 65 74 68 65 72 20   index, whether 
b6f0: 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61  explicitly decla
b700: 72 65 64 20 76 69 61 20 61 20 5b 43 52 45 41 54  red via a [CREAT
b710: 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
b720: 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62 79  nt.or implied by
b730: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
b740: 61 69 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e 64  aint, correspond
b750: 73 20 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d  s to an index b-
b760: 74 72 65 65 20 69 6e 20 74 68 65 0a 64 61 74 61  tree in the.data
b770: 62 61 73 65 20 66 69 6c 65 2e 0a 5e 54 68 65 72  base file..^Ther
b780: 65 20 69 73 20 6f 6e 65 20 65 6e 74 72 79 20 69  e is one entry i
b790: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 66  n index b-tree f
b7a0: 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
b7b0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
b7c0: 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6b 65 79   table..^The key
b7d0: 20 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d 74   to an index b-t
b7e0: 72 65 65 20 69 73 0a 61 20 72 65 63 6f 72 64 20  ree is.a record 
b7f0: 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20  composed of the 
b800: 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
b810: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 66   being indexed f
b820: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a 5b  ollowed by the.[
b830: 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 74 61  rowid] of the ta
b840: 62 6c 65 20 72 6f 77 2e 20 20 42 65 63 61 75 73  ble row.  Becaus
b850: 65 20 65 76 65 72 79 20 72 6f 77 20 69 6e 20 61  e every row in a
b860: 20 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69   table has a uni
b870: 71 75 65 0a 72 6f 77 69 64 20 61 6e 64 20 61 6c  que.rowid and al
b880: 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  l keys in an ind
b890: 65 78 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 72  ex contain the r
b8a0: 6f 77 69 64 2c 20 61 6c 6c 20 6b 65 79 73 20 69  owid, all keys i
b8b0: 6e 20 61 6e 20 69 6e 64 65 78 0a 61 72 65 20 75  n an index.are u
b8c0: 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  nique.</p>..<p>^
b8d0: 54 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74  There is a one-t
b8e0: 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65  o-one mapping be
b8f0: 74 77 65 65 6e 20 72 6f 77 73 20 69 6e 20 61 20  tween rows in a 
b900: 74 61 62 6c 65 20 61 6e 64 0a 65 6e 74 72 69 65  table and.entrie
b910: 73 20 69 6e 20 65 61 63 68 20 69 6e 64 65 78 20  s in each index 
b920: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
b930: 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 43 6f 72  that table..^Cor
b940: 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 73 20  responding rows 
b950: 69 6e 74 20 74 68 65 20 69 6e 64 65 78 20 61 6e  int the index an
b960: 64 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  d table b-trees 
b970: 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 72  share the same r
b980: 6f 77 69 64 0a 76 61 6c 75 65 2c 20 61 6e 64 20  owid.value, and 
b990: 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65  contain the same
b9a0: 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69   value for all i
b9b0: 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c  ndexed columns.<
b9c0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
b9d0: 67 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73  gment sqlite_mas
b9e0: 74 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  ter {sqlite_mast
b9f0: 65 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  er} {sqlite_mast
ba00: 65 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a  er table}</tcl>.
ba10: 3c 68 33 3e 32 2e 35 20 53 74 6f 72 61 67 65 20  <h3>2.5 Storage 
ba20: 4f 66 20 54 68 65 20 53 51 4c 20 44 61 74 61 62  Of The SQL Datab
ba30: 61 73 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a  ase Schema</h3>.
ba40: 0a 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61  .<p>^Page 1 of a
ba50: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
ba60: 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  s the root page 
ba70: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
ba80: 65 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73  e that.holds a s
ba90: 70 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d  pecial table nam
baa0: 65 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  ed "sqlite_maste
bab0: 72 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74  r" (or "sqlite_t
bac0: 65 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74  emp_master" in.t
bad0: 68 65 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d  he case of a TEM
bae0: 50 20 64 61 74 61 62 61 73 65 29 20 77 68 69 63  P database) whic
baf0: 68 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d  h stores the com
bb00: 70 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20 73  plete.database s
bb10: 63 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74  chema.  ^(The st
bb20: 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73  ructure of the s
bb30: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
bb40: 6c 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68  le is as.if it h
bb50: 61 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20  ad been created 
bb60: 75 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77  using the follow
bb70: 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62  ing SQL:</p>..<b
bb80: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
bb90: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
bba0: 69 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79  ite_master(.  ty
bbb0: 70 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20  pe text,.  name 
bbc0: 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65  text,.  tbl_name
bbd0: 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67   text,.  rootpag
bbe0: 65 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c  e integer,.  sql
bbf0: 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c   text.);.</pre><
bc00: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
bc10: 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d  <p>^The sqlite_m
bc20: 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74  aster table cont
bc30: 61 69 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72  ains one row for
bc40: 20 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64   each table, ind
bc50: 65 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72  ex, view,.and tr
bc60: 69 67 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76  igger (collectiv
bc70: 65 6c 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69  ely "objects") i
bc80: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
bc90: 63 68 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68  chema, except th
bca0: 65 72 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20  ere.is no entry 
bcb0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  for the sqlite_m
bcc0: 61 73 74 65 72 20 74 61 62 6c 65 20 69 74 73 65  aster table itse
bcd0: 6c 66 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65  lf.  ^The sqlite
bce0: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f  _master table.co
bcf0: 6e 74 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66  ntains entries f
bd00: 6f 72 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68  or [internal sch
bd10: 65 6d 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20  ema objects] in 
bd20: 61 64 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c  addition to appl
bd30: 69 63 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f  ication-.and pro
bd40: 67 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20  grammer-defined 
bd50: 6f 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28  objects....<p>^(
bd60: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
bd70: 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69  r.type column wi
bd80: 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65  ll be one.of the
bd90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20   following text 
bda0: 73 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65  strings:  'table
bdb0: 27 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65  ', 'index', 'vie
bdc0: 77 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27  w', or 'trigger'
bdd0: 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68  .according to th
bde0: 65 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74  e type of object
bdf0: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27   defined.  The '
be00: 74 61 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73  table' string is
be10: 20 75 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f   used.for both o
be20: 72 64 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72  rdinary and [vir
be30: 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c  tual tables].)^<
be40: 2f 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65 20 73  /p>..</p>^(The s
be50: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d  qlite_master.nam
be60: 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f  e column will ho
be70: 6c 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ld the name of t
be80: 68 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b  he object.)^.^([
be90: 55 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49  UNIQUE] and [PRI
bea0: 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72  MARY KEY] constr
beb0: 61 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65 73 20  aints on tables 
bec0: 63 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20  cause SQLite to 
bed0: 63 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c  create.[internal
bee0: 20 69 6e 64 69 63 65 73 5d 20 77 69 74 68 20 6e   indices] with n
bef0: 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ames of the form
bf00: 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   "sqlite_autoind
bf10: 65 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72  ex_TABLE_N".wher
bf20: 65 20 54 41 42 4c 45 20 69 73 20 72 65 70 6c 61  e TABLE is repla
bf30: 63 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20  ced by the name 
bf40: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
bf50: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63  t contains the.c
bf60: 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20  onstraint and N 
bf70: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
bf80: 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 20 61  ginning with 1 a
bf90: 6e 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79  nd increasing by
bfa0: 20 6f 6e 65 0a 77 69 74 68 20 65 61 63 68 20 63   one.with each c
bfb0: 6f 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 20 69  onstraint seen i
bfc0: 6e 20 74 68 65 20 74 61 62 6c 65 20 64 65 66 69  n the table defi
bfd0: 6e 69 74 69 6f 6e 2e 29 5e 3c 2f 70 3e 0a 0a 3c  nition.)^</p>..<
bfe0: 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  p>The sqlite_mas
bff0: 74 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  ter.tbl_name col
c000: 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  umn holds the na
c010: 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72  me of a table or
c020: 20 76 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f   view.that the o
c030: 62 6a 65 63 74 20 69 73 20 61 73 73 6f 63 69 61  bject is associa
c040: 74 65 64 20 77 69 74 68 2e 20 20 5e 46 6f 72 20  ted with.  ^For 
c050: 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c  a table or view,
c060: 20 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f   the.tbl_name co
c070: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f  lumn is a copy o
c080: 66 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d  f the name colum
c090: 6e 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65  n.  ^For an inde
c0a0: 78 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a  x, the tbl_name.
c0b0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
c0c0: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
c0d0: 20 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f 72 20   indexed.  ^For 
c0e0: 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 74  a trigger, the t
c0f0: 62 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73  bl_name.column s
c100: 74 6f 72 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  tores the name o
c110: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
c120: 69 65 77 20 74 68 61 74 20 63 61 75 73 65 73 20  iew that causes 
c130: 74 68 65 20 74 72 69 67 67 65 72 20 0a 74 6f 20  the trigger .to 
c140: 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  fire.</p>..<p>^(
c150: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
c160: 72 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d  r.rootpage colum
c170: 6e 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  n stores the pag
c180: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
c190: 72 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65  root.b-tree page
c1a0: 20 66 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20   for tables and 
c1b0: 69 6e 64 69 63 65 73 2e 29 5e 20 20 5e 46 6f 72  indices.)^  ^For
c1c0: 20 72 6f 77 73 20 74 68 61 74 20 64 65 66 69 6e   rows that defin
c1d0: 65 20 76 69 65 77 73 2c 20 74 72 69 67 67 65 72  e views, trigger
c1e0: 73 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c 20 74  s,.and virtual t
c1f0: 61 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74 70  ables, the rootp
c200: 61 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20  age column is 0 
c210: 6f 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70  or NULL.</p>..<p
c220: 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  >^(The sqlite_ma
c230: 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20  ster.sql column 
c240: 73 74 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20  stores SQL text 
c250: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
c260: 68 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73  he.object.  This
c270: 20 53 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b   SQL text is a [
c280: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b  CREATE TABLE], [
c290: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
c2a0: 41 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49  ABLE],.[CREATE I
c2b0: 4e 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56  NDEX],.[CREATE V
c2c0: 49 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45  IEW], or [CREATE
c2d0: 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
c2e0: 65 6e 74 20 74 68 61 74 20 69 66 20 65 76 61 6c  ent that if eval
c2f0: 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68  uated against.th
c300: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
c310: 77 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d  when it is the m
c320: 61 69 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20  ain database of 
c330: 61 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  a [database conn
c340: 65 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65  ection].would re
c350: 63 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65  created the obje
c360: 63 74 2e 29 5e 20 20 54 68 65 20 74 65 78 74 20  ct.)^  The text 
c370: 69 73 20 75 73 75 61 6c 6c 79 20 61 20 63 6f 70  is usually a cop
c380: 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  y of the origina
c390: 6c 0a 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  l.statement used
c3a0: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 6f   to create the o
c3b0: 62 6a 65 63 74 20 62 75 74 20 77 69 74 68 20 6e  bject but with n
c3c0: 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 73 20 61 70  ormalizations ap
c3d0: 70 6c 69 65 64 20 73 6f 0a 74 68 61 74 20 74 68  plied so.that th
c3e0: 65 20 74 65 78 74 20 63 6f 6e 66 6f 72 6d 73 20  e text conforms 
c3f0: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
c400: 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c   rules:..<ul>.<l
c410: 69 3e 5e 54 68 65 20 43 52 45 41 54 45 2c 20 54  i>^The CREATE, T
c420: 41 42 4c 45 2c 20 56 49 45 57 2c 20 54 52 49 47  ABLE, VIEW, TRIG
c430: 47 45 52 2c 20 61 6e 64 20 49 4e 44 45 58 20 6b  GER, and INDEX k
c440: 65 79 77 6f 72 64 73 20 61 74 20 74 68 65 20 62  eywords at the b
c450: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
c460: 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 63 6f  statement are co
c470: 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c 20 75  nverted to all u
c480: 70 70 65 72 20 63 61 73 65 20 6c 65 74 74 65 72  pper case letter
c490: 73 2e 0a 3c 6c 69 3e 5e 54 68 65 20 54 45 4d 50  s..<li>^The TEMP
c4a0: 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20 6b 65   or TEMPORARY ke
c4b0: 79 77 6f 72 64 20 69 73 20 72 65 6d 6f 76 65 64  yword is removed
c4c0: 20 69 66 20 69 74 20 6f 63 63 75 72 73 20 61 66   if it occurs af
c4d0: 74 65 72 20 74 68 65 20 0a 69 6e 69 74 69 61 6c  ter the .initial
c4e0: 20 43 52 45 41 54 45 20 6b 65 79 77 6f 72 64 2e   CREATE keyword.
c4f0: 0a 3c 6c 69 3e 5e 41 6e 79 20 64 61 74 61 62 61  .<li>^Any databa
c500: 73 65 20 6e 61 6d 65 20 71 75 61 6c 69 66 69 65  se name qualifie
c510: 72 20 74 68 61 74 20 6f 63 63 75 72 73 20 70 72  r that occurs pr
c520: 69 6f 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ior to the name 
c530: 6f 66 20 74 68 65 0a 6f 62 6a 65 63 74 20 62 65  of the.object be
c540: 69 6e 67 20 63 72 65 61 74 65 64 20 69 73 20 72  ing created is r
c550: 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61  emoved..<li>^Lea
c560: 64 69 6e 67 20 73 70 61 63 65 73 20 61 72 65 20  ding spaces are 
c570: 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c  removed..<li>^Al
c580: 6c 20 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77 69  l spaces followi
c590: 6e 67 20 74 68 65 20 66 69 72 73 74 20 74 77 6f  ng the first two
c5a0: 20 6b 65 79 77 6f 72 64 73 20 61 72 65 20 63 6f   keywords are co
c5b0: 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73  nverted into a s
c5c0: 69 6e 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f 75  ingle.space..</u
c5d0: 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 74 65 78  l>..<p>^(The tex
c5e0: 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  t in the sqlite_
c5f0: 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d  master.sql colum
c600: 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74  n is a copy of t
c610: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 43 52 45 41  he original.CREA
c620: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78  TE statement tex
c630: 74 20 74 68 61 74 20 63 72 65 61 74 65 64 20 74  t that created t
c640: 68 65 20 6f 62 6a 65 63 74 2c 20 65 78 63 65 70  he object, excep
c650: 74 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 73 0a  t normalized as.
c660: 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65 20  described above 
c670: 61 6e 64 20 61 73 20 6d 6f 64 69 66 69 65 64 20  and as modified 
c680: 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 5b 41  by subsequent [A
c690: 4c 54 45 52 20 54 41 42 4c 45 5d 20 73 74 61 74  LTER TABLE] stat
c6a0: 65 6d 65 6e 74 73 2e 29 5e 0a 5e 28 54 68 65 20  ements.)^.^(The 
c6b0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71  sqlite_master.sq
c6c0: 6c 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 74 68  l is NULL for th
c6d0: 65 20 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 69  e [internal indi
c6e0: 63 65 73 5d 20 74 68 61 74 20 61 72 65 0a 61 75  ces] that are.au
c6f0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
c700: 74 65 64 20 62 79 20 5b 55 4e 49 51 55 45 5d 20  ted by [UNIQUE] 
c710: 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d  or [PRIMARY KEY]
c720: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 3c   constraints.)^<
c730: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /p>...<tcl>hd_fr
c740: 61 67 6d 65 6e 74 20 69 6e 74 73 63 68 65 6d 61  agment intschema
c750: 20 7b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d   {internal schem
c760: 61 20 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e  a objects} \.{in
c770: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
c780: 6a 65 63 74 7d 20 7b 69 6e 74 65 72 6e 61 6c 20  ject} {internal 
c790: 69 6e 64 65 78 7d 20 7b 69 6e 74 65 72 6e 61 6c  index} {internal
c7a0: 20 69 6e 64 69 63 65 73 7d 20 5c 0a 7b 69 6e 74   indices} \.{int
c7b0: 65 72 6e 61 6c 20 74 61 62 6c 65 7d 20 7b 69 6e  ernal table} {in
c7c0: 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 7d 3c 2f  ternal tables}</
c7d0: 74 63 6c 3e 0a 3c 68 34 3e 32 2e 35 2e 31 20 49  tcl>.<h4>2.5.1 I
c7e0: 6e 74 65 72 6e 61 6c 20 53 63 68 65 6d 61 20 4f  nternal Schema O
c7f0: 62 6a 65 63 74 73 3c 2f 68 34 3e 0a 0a 3c 70 3e  bjects</h4>..<p>
c800: 5e 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20  ^In addition to 
c810: 74 68 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 69  the tables, indi
c820: 63 65 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 20  ces, views, and 
c830: 74 72 69 67 67 65 72 73 20 63 72 65 61 74 65 64  triggers created
c840: 20 62 79 0a 74 68 65 20 61 70 70 6c 69 63 61 74   by.the applicat
c850: 69 6f 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20 64  ion and/or the d
c860: 65 76 65 6c 6f 70 65 72 20 75 73 69 6e 67 20 43  eveloper using C
c870: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  REATE statements
c880: 20 53 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74 65   SQL, the.sqlite
c890: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6d 61  _master table ma
c8a0: 79 20 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20 6f  y contain zero o
c8b0: 72 20 6d 6f 72 65 20 65 6e 74 72 69 65 73 20 66  r more entries f
c8c0: 6f 72 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c 20  or .<i>internal 
c8d0: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c 2f  schema objects</
c8e0: 69 3e 20 74 68 61 74 20 61 72 65 20 63 72 65 61  i> that are crea
c8f0: 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 66 6f  ted by SQLite fo
c900: 72 20 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65 72  r its .own inter
c910: 6e 61 6c 20 75 73 65 2e 20 20 5e 54 68 65 20 6e  nal use.  ^The n
c920: 61 6d 65 73 20 6f 66 20 69 6e 74 65 72 6e 61 6c  ames of internal
c930: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 0a   schema objects.
c940: 61 6c 77 61 79 73 20 62 65 67 69 6e 20 77 69 74  always begin wit
c950: 68 20 22 73 71 6c 69 74 65 5f 22 20 61 6e 64 20  h "sqlite_" and 
c960: 61 6e 79 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  any table, index
c970: 2c 20 76 69 65 77 2c 20 6f 72 20 74 72 69 67 67  , view, or trigg
c980: 65 72 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62 65  er.whose name be
c990: 67 69 6e 73 20 77 69 74 68 20 22 73 71 6c 69 74  gins with "sqlit
c9a0: 65 5f 22 20 69 73 20 61 6e 20 69 6e 74 65 72 6e  e_" is an intern
c9b0: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
c9c0: 2e 0a 5e 53 51 4c 69 74 65 20 70 72 6f 68 69 62  ..^SQLite prohib
c9d0: 69 74 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  its applications
c9e0: 20 66 72 6f 6d 20 63 72 65 61 74 69 6e 67 20 6f   from creating o
c9f0: 62 6a 65 63 74 73 20 77 68 6f 73 65 20 6e 61 6d  bjects whose nam
ca00: 65 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 73  es begin.with "s
ca10: 71 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e 49  qlite_".  ..<p>I
ca20: 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f  nternal schema o
ca30: 62 6a 65 63 74 73 20 75 73 65 64 20 62 79 20 53  bjects used by S
ca40: 51 4c 69 74 65 20 6d 61 79 20 69 6e 63 6c 75 64  QLite may includ
ca50: 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a  e the following:
ca60: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e  ..<ul>.<li><p>In
ca70: 64 69 63 65 73 20 77 69 74 68 20 6e 61 6d 65 73  dices with names
ca80: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71   of the form "sq
ca90: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54  lite_autoindex_T
caa0: 41 42 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20 20  ABLE_N" that.   
cab0: 20 20 20 20 61 72 65 20 75 73 65 64 20 74 6f 20      are used to 
cac0: 69 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51 55  implement [UNIQU
cad0: 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20  E] and [PRIMARY 
cae0: 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73  KEY] constraints
caf0: 20 6f 6e 0a 20 20 20 20 20 20 20 6f 72 64 69 6e   on.       ordin
cb00: 61 72 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c 69  ary tables...<li
cb10: 3e 3c 70 3e 41 20 74 61 62 6c 65 20 77 69 74 68  ><p>A table with
cb20: 20 74 68 65 20 6e 61 6d 65 20 22 73 71 6c 69 74   the name "sqlit
cb30: 65 5f 73 65 71 75 65 6e 63 65 22 20 74 68 61 74  e_sequence" that
cb40: 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70   is used to keep
cb50: 20 74 72 61 63 6b 0a 20 20 20 20 20 20 20 6f 66   track.       of
cb60: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 69 73   the maximum his
cb70: 74 6f 72 69 63 61 6c 20 5b 49 4e 54 45 47 45 52  torical [INTEGER
cb80: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 6f   PRIMARY KEY] fo
cb90: 72 20 61 20 74 61 62 6c 65 20 74 68 61 74 0a 20  r a table that. 
cba0: 20 20 20 20 20 20 75 73 69 6e 67 20 5b 41 55 54        using [AUT
cbb0: 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c  OINCREMENT]...<l
cbc0: 69 3e 3c 70 3e 54 61 62 6c 65 73 20 77 69 74 68  i><p>Tables with
cbd0: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f   names of the fo
cbe0: 72 6d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 4e  rm "sqlite_statN
cbf0: 22 20 77 68 65 72 65 20 4e 20 69 73 20 61 6e 20  " where N is an 
cc00: 69 6e 74 65 67 65 72 2e 0a 20 20 20 20 20 20 20  integer..       
cc10: 53 75 63 68 20 74 61 62 6c 65 73 20 73 74 6f 72  Such tables stor
cc20: 65 20 64 61 74 61 62 61 73 65 20 73 74 61 74 69  e database stati
cc30: 73 74 69 63 73 20 67 61 74 68 65 72 65 64 20 62  stics gathered b
cc40: 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a  y the [ANALYZE].
cc50: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 61         command a
cc60: 6e 64 20 75 73 65 64 20 62 79 20 74 68 65 20 71  nd used by the q
cc70: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
cc80: 68 65 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 74  help determine t
cc90: 68 65 20 62 65 73 74 0a 20 20 20 20 20 20 20 61  he best.       a
cca0: 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
ccb0: 66 6f 72 20 65 61 63 68 20 71 75 65 72 79 2e 0a  for each query..
ccc0: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 41 64 64 69 74 69  </ul>..<p>Additi
ccd0: 6f 6e 61 6c 20 69 6e 74 65 72 6e 61 6c 20 73 63  onal internal sc
cce0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 6e 61 6d  hema objects nam
ccf0: 65 73 2c 20 61 6c 77 61 79 73 20 62 65 67 69 6e  es, always begin
cd00: 6e 69 6e 67 20 77 69 74 68 20 22 73 71 6c 69 74  ning with "sqlit
cd10: 65 5f 22 2c 0a 6d 61 79 20 62 65 20 61 64 64 65  e_",.may be adde
cd20: 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20  d to the SQLite 
cd30: 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e 20 66  file format in f
cd40: 75 74 75 72 65 20 72 65 6c 65 61 73 65 73 2e 0a  uture releases..
cd50: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
cd60: 74 20 73 65 71 74 61 62 20 7b 73 71 6c 69 74 65  t seqtab {sqlite
cd70: 5f 73 65 71 75 65 6e 63 65 7d 3c 2f 74 63 6c 3e  _sequence}</tcl>
cd80: 0a 3c 68 34 3e 32 2e 35 2e 32 20 54 68 65 20 73  .<h4>2.5.2 The s
cd90: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
cda0: 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  able</h4>..<p>^T
cdb0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
cdc0: 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e 20 69  ce table is an i
cdd0: 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 75 73  nternal table us
cde0: 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
cdf0: 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52 45 4d  ment.[AUTOINCREM
ce00: 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71 6c 69  ENT].  ^The sqli
ce10: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
ce20: 65 20 69 73 20 63 72 65 61 74 65 64 20 61 75 74  e is created aut
ce30: 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65 6e 65  omatically.whene
ce40: 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61 72 79  ver any ordinary
ce50: 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 41   table with an A
ce60: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69 6e 74  UTOINCREMENT int
ce70: 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79  eger primary.key
ce80: 20 69 73 20 63 72 65 61 74 65 64 2e 20 20 5e 4f   is created.  ^O
ce90: 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74 68 65  nce created, the
cea0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ceb0: 20 74 61 62 6c 65 20 65 78 69 73 74 73 20 69 6e   table exists in
cec0: 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74   the.sqlite_mast
ced0: 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76 65 72  er table forever
cee0: 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64  ; it cannot be d
cef0: 72 6f 70 70 65 64 2e 0a 54 68 65 20 73 63 68 65  ropped..The sche
cf00: 6d 61 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  ma for the sqlit
cf10: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
cf20: 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74   is:..<blockquot
cf30: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
cf40: 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 65 71 75  ABLE sqlite_sequ
cf50: 65 6e 63 65 28 6e 61 6d 65 2c 73 65 71 29 3b 0a  ence(name,seq);.
cf60: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
cf70: 74 65 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 69  te>..<p>^There i
cf80: 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69  s a single row i
cf90: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  n the sqlite_seq
cfa0: 75 65 6e 63 65 20 74 61 62 6c 65 20 66 6f 72 20  uence table for 
cfb0: 65 61 63 68 20 6f 72 64 69 6e 61 72 79 0a 74 61  each ordinary.ta
cfc0: 62 6c 65 20 74 68 61 74 20 75 73 65 73 20 41 55  ble that uses AU
cfd0: 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 54 68  TOINCREMENT.  Th
cfe0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
cff0: 62 6c 65 20 28 61 73 20 69 74 20 61 70 70 65 61  ble (as it appea
d000: 72 73 20 69 6e 0a 73 71 6c 69 74 65 5f 6d 61 73  rs in.sqlite_mas
d010: 74 65 72 2e 6e 61 6d 65 29 20 69 73 20 69 6e 20  ter.name) is in 
d020: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
d030: 6e 63 65 2e 6d 61 69 6e 20 66 69 65 6c 64 20 61  nce.main field a
d040: 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 0a 5b  nd the largest.[
d050: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
d060: 4b 45 59 5d 20 65 76 65 72 20 75 73 65 64 20 62  KEY] ever used b
d070: 79 20 74 68 61 74 20 74 61 62 6c 65 20 69 73 20  y that table is 
d080: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  in the sqlite_se
d090: 71 75 65 6e 63 65 2e 73 65 71 0a 66 69 65 6c 64  quence.seq.field
d0a0: 2e 20 20 5e 4e 65 77 20 61 75 74 6f 6d 61 74 69  .  ^New automati
d0b0: 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20  cally generated 
d0c0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
d0d0: 6b 65 79 73 20 66 6f 72 20 41 55 54 4f 49 4e 43  keys for AUTOINC
d0e0: 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20 61 72  REMENT.tables ar
d0f0: 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
d100: 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  be larger than t
d110: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
d120: 63 65 2e 73 65 71 20 66 69 65 6c 64 20 66 6f 72  ce.seq field for
d130: 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 28 49  .that table..^(I
d140: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  f the sqlite_seq
d150: 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20  uence.seq field 
d160: 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  of an AUTOINCREM
d170: 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61 6c 72  ENT table is alr
d180: 65 61 64 79 20 61 74 0a 74 68 65 20 6c 61 72 67  eady at.the larg
d190: 65 73 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  est integer valu
d1a0: 65 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  e (9223372036854
d1b0: 37 37 35 38 30 37 29 20 74 68 65 6e 20 61 74 74  775807) then att
d1c0: 65 6d 70 74 73 20 74 6f 20 61 64 64 20 6e 65 77  empts to add new
d1d0: 0a 72 6f 77 73 20 74 6f 20 74 68 61 74 20 74 61  .rows to that ta
d1e0: 62 6c 65 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ble with an auto
d1f0: 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  matically genera
d200: 74 65 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d  ted integer prim
d210: 61 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a 77 69  ary will fail.wi
d220: 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f 46 55  th an [SQLITE_FU
d230: 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e 54 68  LL] error.)^.^Th
d240: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
d250: 65 2e 73 65 71 20 66 69 65 6c 64 20 69 73 20 61  e.seq field is a
d260: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
d270: 61 74 65 64 20 69 66 20 72 65 71 75 69 72 65 64  ated if required
d280: 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72 69 65   when.new entrie
d290: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  s are added to a
d2a0: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
d2b0: 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65 20 73 71  table.  .^The sq
d2c0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
d2d0: 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43  w for an AUTOINC
d2e0: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20  REMENT table is 
d2f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
d300: 6c 65 74 65 64 0a 77 68 65 6e 20 74 68 65 20 74  leted.when the t
d310: 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e  able is dropped.
d320: 0a 5e 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  .^If the sqlite_
d330: 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72  sequence row for
d340: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
d350: 54 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  T table does not
d360: 20 65 78 69 73 74 20 77 68 65 6e 0a 74 68 65 20   exist when.the 
d370: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
d380: 62 6c 65 20 69 73 20 75 70 64 61 74 65 64 2c 20  ble is updated, 
d390: 74 68 65 6e 20 61 20 6e 65 77 20 73 71 6c 69 74  then a new sqlit
d3a0: 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 69  e_sequence row i
d3b0: 73 20 63 72 65 61 74 65 64 2e 0a 5e 28 49 66 20  s created..^(If 
d3c0: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
d3d0: 6e 63 65 2e 73 65 71 20 76 61 6c 75 65 20 66 6f  nce.seq value fo
d3e0: 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  r an AUTOINCREME
d3f0: 4e 54 20 74 61 62 6c 65 20 69 73 20 6d 61 6e 75  NT table is manu
d400: 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20 73 6f 6d  ally .set to som
d410: 65 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ething other tha
d420: 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  n an integer and
d430: 20 74 68 65 72 65 20 69 73 20 61 20 73 75 62 73   there is a subs
d440: 65 71 75 65 6e 74 20 61 74 74 65 6d 70 74 20 74  equent attempt t
d450: 6f 0a 69 6e 73 65 72 74 20 74 68 65 20 6f 72 20  o.insert the or 
d460: 75 70 64 61 74 65 20 74 68 65 20 41 55 54 4f 49  update the AUTOI
d470: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2c 20  NCREMENT table, 
d480: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
d490: 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 29  r is undefined.)
d4a0: 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63 61 74 69  ^..<p>^Applicati
d4b0: 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77  on code is allow
d4c0: 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ed to modify the
d4d0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
d4e0: 20 74 61 62 6c 65 2c 20 74 6f 20 61 64 64 0a 6e   table, to add.n
d4f0: 65 77 20 72 6f 77 73 2c 20 74 6f 20 64 65 6c 65  ew rows, to dele
d500: 74 65 20 72 6f 77 73 2c 20 6f 72 20 74 6f 20 6d  te rows, or to m
d510: 6f 64 69 66 79 20 65 78 69 73 74 69 6e 67 20 72  odify existing r
d520: 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  ows.  ^However, 
d530: 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 6f 64 65  application.code
d540: 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 74   cannot create t
d550: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
d560: 63 65 20 74 61 62 6c 65 20 69 66 20 69 74 20 64  ce table if it d
d570: 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  oes not already 
d580: 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69 63 61 74  exist..^Applicat
d590: 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20 64 65 6c  ion code can del
d5a0: 65 74 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  ete all entries 
d5b0: 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f  from the sqlite_
d5c0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2c 0a  sequence table,.
d5d0: 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  but application 
d5e0: 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64 72 6f 70  code cannot drop
d5f0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
d600: 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a 3c 74 63  ence table...<tc
d610: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74  l>hd_fragment st
d620: 61 74 31 74 61 62 20 7b 73 71 6c 69 74 65 5f 73  at1tab {sqlite_s
d630: 74 61 74 31 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  tat1}</tcl>.<h4>
d640: 32 2e 35 2e 33 20 54 68 65 20 73 71 6c 69 74 65  2.5.3 The sqlite
d650: 5f 73 74 61 74 31 20 74 61 62 6c 65 3c 2f 68 34  _stat1 table</h4
d660: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74  >..<p>^The sqlit
d670: 65 5f 73 74 61 74 31 20 69 73 20 61 6e 20 69 6e  e_stat1 is an in
d680: 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 63 72 65  ternal table cre
d690: 61 74 65 64 20 62 79 20 74 68 65 20 5b 41 4e 41  ated by the [ANA
d6a0: 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e  LYZE] command.an
d6b0: 64 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 73  d used to hold s
d6c0: 75 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f  upplemental info
d6d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 61  rmation about ta
d6e0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
d6f0: 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79 20   that the.query 
d700: 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20  planner can use 
d710: 74 6f 20 68 65 6c 70 20 69 74 20 66 69 6e 64 20  to help it find 
d720: 62 65 74 74 65 72 20 77 61 79 73 20 6f 66 20 70  better ways of p
d730: 65 72 66 6f 72 6d 69 6e 67 20 71 75 65 72 69 65  erforming querie
d740: 73 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73  s..^Applications
d750: 20 63 61 6e 20 75 70 64 61 74 65 2c 20 64 65 6c   can update, del
d760: 65 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74  ete from, insert
d770: 20 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74 68   into or drop th
d780: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 0a 74  e sqlite_stat1.t
d790: 61 62 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f  able, but may no
d7a0: 74 20 63 72 65 61 74 65 20 6f 72 20 61 6c 74 65  t create or alte
d7b0: 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  r the sqlite_sta
d7c0: 74 31 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73  t1 table..^The s
d7d0: 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
d7e0: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
d7f0: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
d800: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
d810: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
d820: 71 6c 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c  qlite_stat1(tbl,
d830: 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65  idx,stat);.</pre
d840: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
d850: 3c 70 3e 54 68 65 72 65 20 69 73 20 6e 6f 72 6d  <p>There is norm
d860: 61 6c 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65 72  ally one row per
d870: 20 69 6e 64 65 78 2c 20 77 69 74 68 20 74 68 65   index, with the
d880: 20 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65   index identifie
d890: 64 20 62 79 20 74 68 65 0a 6e 61 6d 65 20 69 6e  d by the.name in
d8a0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
d8b0: 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 2e 20 20 54  1.idx column.  T
d8c0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
d8d0: 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a 74 68  tbl column is.th
d8e0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
d8f0: 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68 65  ble to which the
d900: 20 69 6e 64 65 78 20 62 65 6c 6f 6e 67 73 2e 20   index belongs. 
d910: 20 49 6e 20 65 61 63 68 20 73 75 63 68 20 72 6f   In each such ro
d920: 77 2c 20 0a 74 68 65 20 73 71 6c 69 74 65 5f 73  w, .the sqlite_s
d930: 74 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20  tat.stat column 
d940: 77 69 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e 67  will be.a string
d950: 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 61   consisting of a
d960: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72   list of integer
d970: 73 2e 20 20 54 68 65 20 66 69 72 73 74 20 69 6e  s.  The first in
d980: 74 65 67 65 72 20 69 6e 20 74 68 69 73 0a 6c 69  teger in this.li
d990: 73 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  st is the number
d9a0: 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
d9b0: 69 6e 64 65 78 20 61 6e 64 20 69 6e 20 74 68 65  index and in the
d9c0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 73 65 63   table.  The sec
d9d0: 6f 6e 64 0a 69 6e 74 65 67 65 72 20 69 73 20 74  ond.integer is t
d9e0: 68 65 20 61 76 65 72 61 67 65 20 6e 75 6d 62 65  he average numbe
d9f0: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
da00: 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76 65   index that have
da10: 20 74 68 65 20 73 61 6d 65 0a 76 61 6c 75 65 20   the same.value 
da20: 69 6e 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c  in the first col
da30: 75 6d 6e 20 6f 66 20 74 68 65 20 69 6e 64 65 78  umn of the index
da40: 2e 20 20 54 68 65 20 74 68 69 72 64 20 69 6e 74  .  The third int
da50: 65 67 65 72 20 69 73 20 74 68 65 20 61 76 65 72  eger is the aver
da60: 61 67 65 0a 6e 75 6d 62 65 72 20 6f 66 20 72 6f  age.number of ro
da70: 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
da80: 74 68 61 74 20 68 61 76 65 20 74 68 65 20 73 61  that have the sa
da90: 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  me value for the
daa0: 20 66 69 72 73 74 20 74 77 6f 0a 63 6f 6c 75 6d   first two.colum
dab0: 6e 73 2e 20 20 54 68 65 20 4e 2d 74 68 20 69 6e  ns.  The N-th in
dac0: 74 65 67 65 72 20 28 66 6f 72 20 4e 3e 31 29 20  teger (for N>1) 
dad0: 69 73 20 74 68 65 20 61 76 65 72 61 67 65 20 6e  is the average n
dae0: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
daf0: 20 0a 74 68 65 20 69 6e 64 65 78 20 77 68 69 63   .the index whic
db00: 68 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  h have the same 
db10: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69  value for the fi
db20: 72 73 74 20 4e 2d 31 20 63 6f 6c 75 6d 6e 73 2e  rst N-1 columns.
db30: 20 20 46 6f 72 0a 61 20 4b 2d 63 6f 6c 75 6d 6e    For.a K-column
db40: 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20 77 69   index, there wi
db50: 6c 6c 20 62 65 20 4b 2b 31 20 69 6e 74 65 67 65  ll be K+1 intege
db60: 72 73 20 69 6e 20 74 68 65 20 73 74 61 74 20 63  rs in the stat c
db70: 6f 6c 75 6d 6e 2e 20 20 49 66 0a 74 68 65 20 69  olumn.  If.the i
db80: 6e 64 65 78 20 69 73 20 75 6e 69 71 75 65 2c 20  ndex is unique, 
db90: 74 68 65 6e 20 74 68 65 20 6c 61 73 74 20 69 6e  then the last in
dba0: 74 65 67 65 72 20 77 69 6c 6c 20 62 65 20 31 2e  teger will be 1.
dbb0: 0a 0a 3c 70 3e 54 68 65 20 6c 69 73 74 20 6f 66  ..<p>The list of
dbc0: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65   integers in the
dbd0: 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 63 61 6e   stat column can
dbe0: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 66   optionally be f
dbf0: 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20 6b  ollowed.by the k
dc00: 65 79 77 6f 72 64 20 22 75 6e 6f 72 64 65 72 65  eyword "unordere
dc10: 64 22 2e 20 20 54 68 65 20 22 75 6e 6f 72 64 65  d".  The "unorde
dc20: 72 65 64 22 20 6b 65 79 77 6f 72 64 2c 20 69 66  red" keyword, if
dc30: 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 2c 0a   it is present,.
dc40: 6d 75 73 74 20 62 65 20 73 65 70 61 72 61 74 65  must be separate
dc50: 64 20 66 72 6f 6d 20 74 68 65 20 6c 61 73 74 20  d from the last 
dc60: 69 6e 74 65 67 65 72 20 62 79 20 61 20 73 69 6e  integer by a sin
dc70: 67 6c 65 20 73 70 61 63 65 2e 20 20 49 66 20 74  gle space.  If t
dc80: 68 65 0a 22 75 6e 6f 72 64 65 72 65 64 22 20 6b  he."unordered" k
dc90: 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
dca0: 74 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65 72  t, then the quer
dcb0: 79 20 70 6c 61 6e 6e 65 72 20 61 73 73 75 6d 65  y planner assume
dcc0: 73 20 74 68 61 74 0a 74 68 65 20 69 6e 64 65 78  s that.the index
dcd0: 20 69 73 20 75 6e 6f 72 64 65 72 65 64 20 61 6e   is unordered an
dce0: 64 20 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74  d will not use t
dcf0: 68 65 20 69 6e 64 65 78 20 66 6f 72 20 61 20 72  he index for a r
dd00: 61 6e 67 65 20 71 75 65 72 79 2e 0a 0a 3c 70 3e  ange query...<p>
dd10: 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  If the sqlite_st
dd20: 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 69  at1.idx column i
dd30: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  s NULL, then the
dd40: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 73 74   sqlite_stat1.st
dd50: 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  at.column contai
dd60: 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  ns a single inte
dd70: 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
dd80: 20 28 65 73 74 69 6d 61 74 65 64 29 20 6e 75 6d   (estimated) num
dd90: 62 65 72 20 6f 66 0a 72 6f 77 73 20 69 6e 20 74  ber of.rows in t
dda0: 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66  he table identif
ddb0: 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73 74  ied by sqlite_st
ddc0: 61 74 31 2e 74 62 6c 2e 0a 0a 3c 74 63 6c 3e 68  at1.tbl...<tcl>h
ddd0: 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 32  d_fragment stat2
dde0: 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74  tab {sqlite_stat
ddf0: 32 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 35  2}</tcl>.<h4>2.5
de00: 2e 34 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .4 The sqlite_st
de10: 61 74 32 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a  at2 table</h4>..
de20: 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
de30: 61 74 32 20 69 73 20 6f 6e 6c 79 20 63 72 65 61  at2 is only crea
de40: 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20  ted and is only 
de50: 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  used if SQLite i
de60: 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20  s compiled.with 
de70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
de80: 41 54 32 20 61 6e 64 20 69 66 20 74 68 65 20 53  AT2 and if the S
de90: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
dea0: 6d 62 65 72 20 69 73 20 62 65 74 77 65 65 6e 0a  mber is between.
deb0: 33 2e 36 2e 31 38 20 61 6e 64 20 33 2e 37 2e 38  3.6.18 and 3.7.8
dec0: 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .  The sqlite_st
ded0: 61 74 32 20 74 61 62 6c 65 20 69 73 20 6e 65 69  at2 table is nei
dee0: 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72  ther read nor wr
def0: 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72  itten by any.ver
df00: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62  sion of SQLite b
df10: 65 66 6f 72 65 20 33 2e 36 2e 31 38 20 6e 6f 72  efore 3.6.18 nor
df20: 20 61 66 74 65 72 20 33 2e 37 2e 38 2e 0a 54 68   after 3.7.8..Th
df30: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
df40: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64  able contains ad
df50: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
df60: 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64  tion.about the d
df70: 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b  istribution of k
df80: 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e  eys within an in
df90: 64 65 78 2e 0a 54 68 65 20 73 63 68 65 6d 61 20  dex..The schema 
dfa0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
dfb0: 61 74 32 20 74 61 62 6c 65 20 69 73 20 61 73 20  at2 table is as 
dfc0: 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b  follows:..<block
dfd0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
dfe0: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
dff0: 73 74 61 74 32 28 74 62 6c 2c 69 64 78 2c 73 61  stat2(tbl,idx,sa
e000: 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65 29 3b 0a  mpleno,sample);.
e010: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
e020: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  te>..<p>The sqli
e030: 74 65 5f 73 74 61 74 32 2e 69 64 78 20 63 6f 6c  te_stat2.idx col
e040: 75 6d 6e 20 61 6e 64 20 74 68 65 20 73 71 6c 69  umn and the sqli
e050: 74 65 5f 73 74 61 74 32 2e 74 62 6c 20 63 6f 6c  te_stat2.tbl col
e060: 75 6d 6e 20 69 6e 20 65 61 63 68 20 0a 72 6f 77  umn in each .row
e070: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
e080: 74 61 74 32 20 74 61 62 6c 65 20 69 64 65 6e 74  tat2 table ident
e090: 69 66 79 20 61 6e 20 69 6e 64 65 78 20 64 65 73  ify an index des
e0a0: 63 72 69 62 65 64 20 62 79 20 74 68 61 74 20 72  cribed by that r
e0b0: 6f 77 2e 0a 54 68 65 72 65 20 61 72 65 20 75 73  ow..There are us
e0c0: 75 61 6c 6c 79 20 31 30 20 72 6f 77 73 20 69 6e  ually 10 rows in
e0d0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
e0e0: 32 0a 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68  2.table for each
e0f0: 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68 65 20   index...<p>The 
e100: 73 71 6c 69 74 65 5f 73 74 61 74 32 20 65 6e 74  sqlite_stat2 ent
e110: 72 69 65 73 20 66 6f 72 20 61 6e 20 69 6e 64 65  ries for an inde
e120: 78 20 74 68 61 74 20 68 61 76 65 20 73 71 6c 69  x that have sqli
e130: 74 65 5f 73 74 61 74 32 2e 73 61 6d 70 6c 65 6e  te_stat2.samplen
e140: 6f 0a 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  o.between 0 and 
e150: 39 20 69 6e 63 6c 75 73 69 76 65 20 61 72 65 20  9 inclusive are 
e160: 73 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  samples of the l
e170: 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 76 61 6c  eft-most key val
e180: 75 65 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20  ue in the.index 
e190: 74 61 6b 65 6e 20 61 74 20 65 76 65 6e 6c 79 20  taken at evenly 
e1a0: 73 70 61 63 65 64 20 70 6f 69 6e 74 73 20 61 6c  spaced points al
e1b0: 6f 6e 67 20 74 68 65 20 69 6e 64 65 78 2e 0a 4c  ong the index..L
e1c0: 65 74 20 43 20 62 65 20 74 68 65 20 6e 75 6d 62  et C be the numb
e1d0: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
e1e0: 65 20 69 6e 64 65 78 2e 0a 54 68 65 6e 20 74 68  e index..Then th
e1f0: 65 20 73 61 6d 70 6c 65 64 20 72 6f 77 73 20 61  e sampled rows a
e200: 72 65 20 67 69 76 65 6e 20 62 79 0a 0a 3c 62 6c  re given by..<bl
e210: 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 20 72  ockquote>.     r
e220: 6f 77 6e 75 6d 62 65 72 20 3d 20 28 69 2a 43 2a  ownumber = (i*C*
e230: 32 20 2b 20 43 29 2f 32 30 0a 3c 2f 62 6c 6f 63  2 + C)/20.</bloc
e240: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20  kquote>..<p>The 
e250: 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20 74 68  variable i in th
e260: 65 20 70 72 65 76 69 6f 75 73 20 65 78 70 72 65  e previous expre
e270: 73 73 69 6f 6e 20 76 61 72 69 65 73 20 62 65 74  ssion varies bet
e280: 77 65 65 6e 20 30 20 61 6e 64 20 39 2e 0a 43 6f  ween 0 and 9..Co
e290: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65 20  nceptually, the 
e2a0: 69 6e 64 65 78 20 73 70 61 63 65 20 69 73 20 64  index space is d
e2b0: 69 76 69 64 65 64 20 69 6e 74 6f 0a 31 30 20 75  ivided into.10 u
e2c0: 6e 69 66 6f 72 6d 20 62 75 63 6b 65 74 73 20 61  niform buckets a
e2d0: 6e 64 20 74 68 65 20 73 61 6d 70 6c 65 73 20 61  nd the samples a
e2e0: 72 65 20 74 68 65 20 6d 69 64 64 6c 65 20 72 6f  re the middle ro
e2f0: 77 20 66 72 6f 6d 20 65 61 63 68 20 62 75 63 6b  w from each buck
e300: 65 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d  et...<p>The form
e310: 61 74 20 66 6f 72 20 73 71 6c 69 74 65 5f 73 74  at for sqlite_st
e320: 61 74 32 20 69 73 20 72 65 63 6f 72 64 65 64 20  at2 is recorded 
e330: 68 65 72 65 20 66 6f 72 20 6c 65 67 61 63 79 20  here for legacy 
e340: 72 65 66 65 72 65 6e 63 65 2e 20 20 0a 52 65 63  reference.  .Rec
e350: 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent versions of 
e360: 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67 65 72  SQLite no longer
e370: 20 73 75 70 70 6f 72 74 20 73 71 6c 69 74 65 5f   support sqlite_
e380: 73 74 61 74 32 20 61 6e 64 20 74 68 65 0a 73 71  stat2 and the.sq
e390: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
e3a0: 2c 20 69 74 20 69 73 20 65 78 69 73 74 73 2c 20  , it is exists, 
e3b0: 69 73 20 73 69 6d 70 6c 79 20 69 67 6e 6f 72 65  is simply ignore
e3c0: 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  d...<tcl>hd_frag
e3d0: 6d 65 6e 74 20 73 74 61 74 33 74 61 62 20 7b 73  ment stat3tab {s
e3e0: 71 6c 69 74 65 5f 73 74 61 74 33 7d 3c 2f 74 63  qlite_stat3}</tc
e3f0: 6c 3e 0a 3c 68 34 3e 32 2e 35 2e 35 20 54 68 65  l>.<h4>2.5.5 The
e400: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
e410: 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  ble</h4>..<p>The
e420: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 69 73   sqlite_stat3 is
e430: 20 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e   only created an
e440: 64 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  d is only used i
e450: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
e460: 69 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54  iled.with [SQLIT
e470: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20  E_ENABLE_STAT3] 
e480: 61 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74  and if the SQLit
e490: 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
e4a0: 20 69 73 0a 33 2e 37 2e 39 20 6f 72 20 67 72 65   is.3.7.9 or gre
e4b0: 61 74 65 72 2e 20 20 54 68 65 20 73 71 6c 69 74  ater.  The sqlit
e4c0: 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
e4d0: 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f   neither read no
e4e0: 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79  r written by any
e4f0: 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69  .version of SQLi
e500: 74 65 20 62 65 66 6f 72 65 20 33 2e 36 2e 39 2e  te before 3.6.9.
e510: 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
e520: 33 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  3 table contains
e530: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e540: 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68  rmation.about th
e550: 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f  e distribution o
e560: 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e  f keys within an
e570: 20 69 6e 64 65 78 2c 20 69 6e 66 6f 72 6d 61 74   index, informat
e580: 69 6f 6e 20 74 68 61 74 20 74 68 65 0a 71 75 65  ion that the.que
e590: 72 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75  ry planner can u
e5a0: 73 65 20 74 6f 20 64 65 76 69 73 65 20 62 65 74  se to devise bet
e5b0: 74 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 71  ter and faster q
e5c0: 75 65 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e  uery algorithms.
e5d0: 0a 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74  .The schema of t
e5e0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
e5f0: 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c  table is as foll
e600: 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ows:..<blockquot
e610: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
e620: 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74  ABLE sqlite_stat
e630: 33 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c  3(tbl,idx,nEq,nL
e640: 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a  t,nDLt,sample);.
e650: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
e660: 74 65 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72  te>..<p>There ar
e670: 65 20 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69 70  e usually multip
e680: 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  le entries in th
e690: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
e6a0: 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e  able for each in
e6b0: 64 65 78 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  dex..The sqlite_
e6c0: 73 74 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c  stat3.sample col
e6d0: 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61  umn holds the va
e6e0: 6c 75 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  lue of the left-
e6f0: 6d 6f 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e  most field of an
e700: 0a 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65  .index identifie
e710: 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 5f  d by the sqlite_
e720: 73 74 61 74 33 2e 69 64 78 20 61 6e 64 20 74 68  stat3.idx and th
e730: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 74  e sqlite_stat3.t
e740: 62 6c 20 63 6f 6c 75 6d 6e 73 2e 0a 49 66 20 74  bl columns..If t
e750: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  he sqlite_stat3.
e760: 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65 5f 73  idx and sqlite_s
e770: 74 61 74 33 2e 74 62 6c 0a 63 6f 6c 75 6d 6e 73  tat3.tbl.columns
e780: 20 68 6f 6c 64 20 74 68 65 20 73 61 6d 65 20 76   hold the same v
e790: 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61 74 20  alue, then that 
e7a0: 72 6f 77 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  row contains a s
e7b0: 61 6d 70 6c 65 20 66 72 6f 6d 0a 74 68 65 20 5b  ample from.the [
e7c0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
e7d0: 4b 45 59 5d 20 6f 66 20 74 68 65 20 74 61 62 6c  KEY] of the tabl
e7e0: 65 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  e..The sqlite_st
e7f0: 61 74 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68  at3.nEq column h
e800: 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69  olds the approxi
e810: 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65  mate.number of e
e820: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
e830: 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d  dex whose left-m
e840: 6f 73 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74  ost column exact
e850: 6c 79 20 6d 61 74 63 68 65 73 0a 74 68 65 20 73  ly matches.the s
e860: 61 6d 70 6c 65 2e 20 20 0a 54 68 65 20 73 71 6c  ample.  .The sql
e870: 69 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f  ite_stat3.nLt ho
e880: 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d  lds the approxim
e890: 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  ate number of en
e8a0: 74 72 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64  tries in the.ind
e8b0: 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f  ex whose left-mo
e8c0: 73 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73  st column is les
e8d0: 73 20 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c  s than the sampl
e8e0: 65 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  e..The sqlite_st
e8f0: 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20  at3.nDLt column 
e900: 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78  holds the approx
e910: 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20  imate.number of 
e920: 64 69 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f  distinct left-mo
e930: 73 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  st entries in th
e940: 65 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  e index that are
e950: 20 6c 65 73 73 20 74 68 61 6e 0a 74 68 65 20 73   less than.the s
e960: 61 6d 70 6c 65 2e 0a 0a 3c 70 3e 46 75 74 75 72  ample...<p>Futur
e970: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  e versions of SQ
e980: 4c 69 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67  Lite might chang
e990: 65 20 74 6f 20 73 74 6f 72 65 20 61 20 73 74 72  e to store a str
e9a0: 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6d  ing containing.m
e9b0: 75 6c 74 69 70 6c 65 20 69 6e 74 65 67 65 72 73  ultiple integers
e9c0: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 73   values in the s
e9d0: 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 44 4c 74  qlite_stat3.nDLt
e9e0: 20 63 6f 6c 75 6d 6e 2c 20 61 20 73 74 72 69 6e   column, a strin
e9f0: 67 20 69 6e 20 77 68 69 63 68 0a 74 68 65 20 66  g in which.the f
ea00: 69 72 73 74 20 69 6e 74 65 67 65 72 20 77 69 6c  irst integer wil
ea10: 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20  l be the number 
ea20: 6f 66 20 70 72 69 6f 72 20 69 6e 64 65 78 20 65  of prior index e
ea30: 6e 74 72 69 65 73 20 74 68 61 74 20 61 72 65 0a  ntries that are.
ea40: 64 69 73 74 69 6e 63 74 20 69 6e 20 74 68 65 20  distinct in the 
ea50: 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
ea60: 2c 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 74  , the second int
ea70: 65 67 65 72 20 69 73 20 74 68 65 20 6e 75 6d 62  eger is the numb
ea80: 65 72 20 6f 66 0a 70 72 69 6f 72 20 69 6e 64 65  er of.prior inde
ea90: 78 20 65 6e 74 72 69 65 73 20 74 68 61 74 20 61  x entries that a
eaa0: 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20 74  re distinct in t
eab0: 68 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f 6c  he first two col
eac0: 75 6d 6e 73 2c 20 74 68 65 0a 74 68 69 72 64 20  umns, the.third 
ead0: 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 6e  integer is the n
eae0: 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20 69  umber of prior i
eaf0: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 74 68 61  ndex entries tha
eb00: 74 20 61 72 65 20 64 69 73 74 69 6e 63 74 0a 69  t are distinct.i
eb10: 6e 20 74 68 65 20 66 69 72 73 74 20 74 68 72 65  n the first thre
eb20: 65 20 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 73  e columns, and s
eb30: 6f 20 66 6f 72 74 68 20 20 57 69 74 68 20 73 75  o forth  With su
eb40: 63 68 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 2c  ch an extension,
eb50: 20 74 68 65 0a 6e 44 4c 74 20 66 69 65 6c 64 20   the.nDLt field 
eb60: 77 69 6c 6c 20 62 65 63 6f 6d 65 20 73 69 6d 69  will become simi
eb70: 6c 61 72 20 69 6e 20 66 75 6e 63 74 69 6f 6e 20  lar in function 
eb80: 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  to the sqlite_st
eb90: 61 74 31 2e 73 74 61 74 20 66 69 65 6c 64 2e 0a  at1.stat field..
eba0: 0a 3c 70 3e 54 68 65 72 65 20 63 61 6e 20 62 65  .<p>There can be
ebb0: 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75   an arbitrary nu
ebc0: 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73  mber of sqlite_s
ebd0: 74 61 74 33 20 65 6e 74 72 69 65 73 20 70 65 72  tat3 entries per
ebe0: 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41   index..The [ANA
ebf0: 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69  LYZE] command wi
ec00: 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e  ll typically gen
ec10: 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61  erate sqlite_sta
ec20: 74 33 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63  t3 tables.that c
ec30: 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31  ontain between 1
ec40: 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73  0 and 40 samples
ec50: 20 74 68 61 74 20 61 72 65 20 64 69 73 74 72 69   that are distri
ec60: 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65  buted across.the
ec70: 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64 20 77   key space and w
ec80: 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61  ith large nEq va
ec90: 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  lues...<tcl>hd_f
eca0: 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b  ragment rollback
ecb0: 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63  journal {rollbac
ecc0: 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74  k journal format
ecd0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e 30 20  }</tcl>.<h2>3.0 
ece0: 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  The Rollback Jou
ecf0: 72 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  rnal</h2>..<p>Th
ed00: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
ed10: 61 6c 20 69 73 20 61 20 66 69 6c 65 20 61 73 73  al is a file ass
ed20: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
ed30: 68 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  h SQLite databas
ed40: 65 0a 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64  e.file that hold
ed50: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   information use
ed60: 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65  d to restore the
ed70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
ed80: 6f 20 69 74 73 20 69 6e 69 74 69 61 6c 0a 73 74  o its initial.st
ed90: 61 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63  ate during the c
eda0: 6f 75 72 73 65 20 6f 66 20 61 20 74 72 61 6e 73  ourse of a trans
edb0: 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c  action..^The rol
edc0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
edd0: 6c 65 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63  le is always loc
ede0: 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  ated in the same
edf0: 20 0a 64 69 72 65 63 74 6f 72 79 20 61 73 20 74   .directory as t
ee00: 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  he database.file
ee10: 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d   and has the sam
ee20: 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61  e name as the da
ee30: 74 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20  tabase file but 
ee40: 77 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a  with the string.
ee50: 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74  "<tt>-journal</t
ee60: 74 3e 22 20 61 70 70 65 6e 64 65 64 2e 20 20 54  t>" appended.  T
ee70: 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
ee80: 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61   a single rollba
ee90: 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63  ck journal.assoc
eea0: 69 61 74 65 64 20 77 69 74 68 20 61 20 67 69 76  iated with a giv
eeb0: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68  e database and h
eec0: 65 6e 63 65 20 74 68 65 72 65 20 63 61 6e 20 6f  ence there can o
eed0: 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74 65  nly be one write
eee0: 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65  .transaction ope
eef0: 6e 20 61 67 61 69 6e 73 74 20 61 20 73 69 6e 67  n against a sing
ef00: 6c 65 20 64 61 74 61 62 61 73 65 20 61 74 20 6f  le database at o
ef10: 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70  ne time.</p>..<p
ef20: 3e 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f  >If a transactio
ef30: 6e 20 69 73 20 61 62 6f 72 74 65 64 20 64 75 65  n is aborted due
ef40: 20 74 6f 20 61 6e 20 61 70 70 6c 69 63 61 74 69   to an applicati
ef50: 6f 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f 70 65  on crash, an ope
ef60: 72 61 74 69 6e 67 0a 73 79 73 74 65 6d 20 63 72  rating.system cr
ef70: 61 73 68 2c 20 6f 72 20 61 20 68 61 72 64 77 61  ash, or a hardwa
ef80: 72 65 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65  re power failure
ef90: 20 6f 72 20 63 72 61 73 68 2c 20 74 68 65 6e 20   or crash, then 
efa0: 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 61 79  the database may
efb0: 0a 62 65 20 6c 65 66 74 20 69 6e 20 61 6e 20 69  .be left in an i
efc0: 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74  nconsistent stat
efd0: 65 2e 20 20 5e 54 68 65 20 6e 65 78 74 20 74 69  e.  ^The next ti
efe0: 6d 65 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  me SQLite attemp
eff0: 74 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64  ts to open.the d
f000: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68  atabase file, th
f010: 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68  e presence of th
f020: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
f030: 61 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20  al file will be 
f040: 0a 64 65 74 65 63 74 65 64 20 61 6e 64 20 74 68  .detected and th
f050: 65 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62  e journal will b
f060: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
f070: 70 6c 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72  played back to r
f080: 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62  estore the.datab
f090: 61 73 65 20 74 6f 20 69 74 73 20 73 74 61 74 65  ase to its state
f0a0: 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
f0b0: 20 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20   the incomplete 
f0c0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
f0d0: 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b  ..<p>^A rollback
f0e0: 20 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79   journal is only
f0f0: 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
f100: 65 20 76 61 6c 69 64 20 69 66 20 69 74 20 65 78  e valid if it ex
f110: 69 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e  ists and.contain
f120: 73 20 61 20 76 61 6c 69 64 20 68 65 61 64 65 72  s a valid header
f130: 2e 20 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73  .  Hence a trans
f140: 61 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f  action can be co
f150: 6d 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f  mmitted in one.o
f160: 66 20 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f  f three ways:.<o
f170: 6c 3e 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c  l>.<li>^(The rol
f180: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
f190: 6c 65 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65  le can be delete
f1a0: 64 29 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20 72  d)^,.<li>^(The r
f1b0: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
f1c0: 66 69 6c 65 20 63 61 6e 20 62 65 20 74 72 75 6e  file can be trun
f1d0: 63 61 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65  cated to zero le
f1e0: 6e 67 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e  ngth)^, or.<li>^
f1f0: 28 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 74  (The header of t
f200: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
f210: 6e 61 6c 20 63 61 6e 20 62 65 20 6f 76 65 72 77  nal can be overw
f220: 72 69 74 74 65 6e 20 77 69 74 68 0a 69 6e 76 61  ritten with.inva
f230: 6c 69 64 20 68 65 61 64 65 72 20 74 65 78 74 20  lid header text 
f240: 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c  (for example, al
f250: 6c 20 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c  l zeros).)^.</ol
f260: 3e 0a 5e 54 68 65 73 65 20 74 68 72 65 65 20 77  >.^These three w
f270: 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e  ays of committin
f280: 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  g a transaction 
f290: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  correspond to th
f2a0: 65 20 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41  e DELETE,.TRUNCA
f2b0: 54 45 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20  TE, and PERSIST 
f2c0: 73 65 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63  settings, respec
f2d0: 74 69 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b  tively, of the [
f2e0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61  journal_mode pra
f2f0: 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e  gma]..</p>...<p>
f300: 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b  A valid rollback
f310: 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20   journal begins 
f320: 77 69 74 68 20 61 20 68 65 61 64 65 72 20 69 6e  with a header in
f330: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   the following f
f340: 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  ormat:</p>..<cen
f350: 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b  ter>.<i>Rollback
f360: 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20   Journal Header 
f370: 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
f380: 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
f390: 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
f3a0: 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
f3b0: 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
f3c0: 6e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69  n.<tr>^(<td vali
f3d0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
f3e0: 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61  ter>0.    <td va
f3f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
f400: 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e  enter>8.    <td>
f410: 48 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20 20  Header string:  
f420: 30 78 64 39 2c 20 30 78 64 35 2c 20 30 78 30 35  0xd9, 0xd5, 0x05
f430: 2c 20 30 78 66 39 2c 20 30 78 32 30 2c 20 30 78  , 0xf9, 0x20, 0x
f440: 61 31 2c 20 30 78 36 33 2c 20 30 78 64 37 29 5e  a1, 0x63, 0xd7)^
f450: 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67  .<tr>^(<td valig
f460: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
f470: 65 72 3e 38 0a 20 20 20 20 3c 74 64 20 76 61 6c  er>8.    <td val
f480: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
f490: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54  nter>4.    <td>T
f4a0: 68 65 20 22 50 61 67 65 20 43 6f 75 6e 74 22 20  he "Page Count" 
f4b0: 2d 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  - The number of 
f4c0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 6e 65 78  pages in the nex
f4d0: 74 20 73 65 67 6d 65 6e 74 20 6f 66 20 74 68 65  t segment of the
f4e0: 20 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61   .        journa
f4f0: 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a 20 20 20 20  l, or -1 to.    
f500: 20 20 20 20 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e      mean all con
f510: 74 65 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20  tent to the end 
f520: 6f 66 20 74 68 65 20 66 69 6c 65 29 5e 0a 3c 74  of the file)^.<t
f530: 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>^(<td valign=t
f540: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
f550: 31 32 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  12.    <td valig
f560: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
f570: 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20 72  er>4.    <td>A r
f580: 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20  andom nonce for 
f590: 74 68 65 20 63 68 65 63 6b 73 75 6d 29 5e 0a 3c  the checksum)^.<
f5a0: 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d  tr>^(<td valign=
f5b0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
f5c0: 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >16.    <td vali
f5d0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
f5e0: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e  ter>4.    <td>In
f5f0: 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  itial size of th
f600: 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 70 61  e database in pa
f610: 67 65 73 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20  ges)^.<tr>^(<td 
f620: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
f630: 3d 63 65 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c  =center>20.    <
f640: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
f650: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
f660: 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 61 20 64   <td>Size of a d
f670: 69 73 6b 20 73 65 63 74 6f 72 20 61 73 73 75 6d  isk sector assum
f680: 65 64 20 62 79 20 74 68 65 20 70 72 6f 63 65 73  ed by the proces
f690: 73 20 74 68 61 74 20 77 72 6f 74 65 20 74 68 69  s that wrote thi
f6a0: 73 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61  s.        journa
f6b0: 6c 2e 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76  l.)^.<tr>^(<td v
f6c0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
f6d0: 63 65 6e 74 65 72 3e 32 34 0a 20 20 20 20 3c 74  center>24.    <t
f6e0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
f6f0: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
f700: 3c 74 64 3e 53 69 7a 65 20 6f 66 20 70 61 67 65  <td>Size of page
f710: 73 20 69 6e 20 74 68 69 73 20 6a 6f 75 72 6e 61  s in this journa
f720: 6c 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  l.)^.</table>.</
f730: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20 72  center>..<p>^A r
f740: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
f750: 68 65 61 64 65 72 20 69 73 20 70 61 64 64 65 64  header is padded
f760: 20 77 69 74 68 20 7a 65 72 6f 73 20 6f 75 74 20   with zeros out 
f770: 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61  to the size of a
f780: 20 0a 73 69 6e 67 6c 65 20 73 65 63 74 6f 72 20   .single sector 
f790: 28 61 73 20 64 65 66 69 6e 65 64 20 62 79 20 74  (as defined by t
f7a0: 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20 69  he sector size i
f7b0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
f7c0: 20 32 30 29 2e 0a 54 68 65 20 68 65 61 64 65 72   20)..The header
f7d0: 20 69 73 20 69 6e 20 61 20 73 65 63 74 6f 72 20   is in a sector 
f7e0: 62 79 20 69 74 73 65 6c 66 20 73 6f 20 74 68 61  by itself so tha
f7f0: 74 20 69 66 20 61 20 70 6f 77 65 72 20 6c 6f 73  t if a power los
f800: 73 20 6f 63 63 75 72 73 20 77 68 69 6c 65 0a 77  s occurs while.w
f810: 72 69 74 69 6e 67 20 74 68 65 20 73 65 63 74 6f  riting the secto
f820: 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  r, information t
f830: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  hat follows the 
f840: 68 65 61 64 65 72 20 77 69 6c 6c 20 62 65 0a 28  header will be.(
f850: 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e 64 61 6d  hopefully) undam
f860: 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  aged.</p>..<p>^A
f870: 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
f880: 61 6e 64 20 7a 65 72 6f 20 70 61 64 64 69 6e 67  and zero padding
f890: 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72   are zero or mor
f8a0: 65 20 70 61 67 65 20 72 65 63 6f 72 64 73 2e 20  e page records. 
f8b0: 20 5e 45 61 63 68 0a 70 61 67 65 20 72 65 63 6f   ^Each.page reco
f8c0: 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f 70 79  rd stores a copy
f8d0: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
f8e0: 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d 20 74  of a page from t
f8f0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
f900: 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73 20 63  .before it was c
f910: 68 61 6e 67 65 64 2e 20 20 5e 54 68 65 20 73 61  hanged.  ^The sa
f920: 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f 74 20  me page may not 
f930: 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68 61 6e  appear more than
f940: 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61 20 73   once.within a s
f950: 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  ingle rollback j
f960: 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c 62  ournal..To rollb
f970: 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74  ack an incomplet
f980: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61  e transaction, a
f990: 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d 65 72   process.has mer
f9a0: 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68 65 20  ely to read the 
f9b0: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
f9c0: 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
f9d0: 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69 74 65  to end and.write
f9e0: 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69 6e 20   pages found in 
f9f0: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61 63 6b  the journal back
fa00: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
fa10: 73 65 20 66 69 6c 65 20 61 74 20 74 68 65 0a 61  se file at the.a
fa20: 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63 61 74  ppropriate locat
fa30: 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74  ion.</p>..<p>Let
fa40: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
fa50: 67 65 20 73 69 7a 65 20 28 74 68 65 20 76 61 6c  ge size (the val
fa60: 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
fa70: 72 20 61 74 20 6f 66 66 73 65 74 20 32 34 20 0a  r at offset 24 .
fa80: 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68  in the journal h
fa90: 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54 68 65  eader) be N..The
faa0: 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  n the format of 
fab0: 61 20 70 61 67 65 20 72 65 63 6f 72 64 20 69 73  a page record is
fac0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
fad0: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f  ..<center>.<i>Ro
fae0: 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 50  llback Journal P
faf0: 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61  age Record Forma
fb00: 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
fb10: 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
fb20: 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
fb30: 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
fb40: 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
fb50: 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >^(<td valign=to
fb60: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
fb70: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
fb80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
fb90: 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70  >4.    <td>The p
fba0: 61 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  age number in th
fbb0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 29  e database file)
fbc0: 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69  ^.<tr>^(<td vali
fbd0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
fbe0: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20 76 61  ter>4.    <td va
fbf0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
fc00: 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e  enter>N.    <td>
fc10: 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74  Original content
fc20: 20 6f 66 20 74 68 65 20 70 61 67 65 20 70 72 69   of the page pri
fc30: 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  or to the start 
fc40: 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  of the transacti
fc50: 6f 6e 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76  on)^.<tr>^(<td v
fc60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
fc70: 63 65 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c  center>N+4.    <
fc80: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
fc90: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
fca0: 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 29 5e 0a   <td>Checksum)^.
fcb0: 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
fcc0: 72 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 63 68  r>...<p>^(The ch
fcd0: 65 63 6b 73 75 6d 20 69 73 20 61 6e 20 75 6e 73  ecksum is an uns
fce0: 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74  igned 32-bit int
fcf0: 65 67 65 72 20 63 6f 6d 70 75 74 65 64 20 61 73  eger computed as
fd00: 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
fd10: 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69  ol>.<li>Initiali
fd20: 7a 65 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20  ze the checksum 
fd30: 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20  to the checksum 
fd40: 6e 6f 6e 63 65 20 76 61 6c 75 65 20 66 6f 75 6e  nonce value foun
fd50: 64 20 69 6e 20 74 68 65 0a 6a 6f 75 72 6e 61 6c  d in the.journal
fd60: 20 68 65 61 64 65 72 20 61 74 20 6f 66 66 73 65   header at offse
fd70: 74 20 31 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61  t 12..<li>Initia
fd80: 6c 69 7a 65 20 69 6e 64 65 78 20 58 20 74 6f 20  lize index X to 
fd90: 62 65 20 4e 2d 32 30 30 20 28 77 68 65 72 65 20  be N-200 (where 
fda0: 4e 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66  N is the size of
fdb0: 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65   a database page
fdc0: 0a 69 6e 20 62 79 74 65 73 2e 0a 3c 6c 69 3e 49  .in bytes..<li>I
fdd0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 66 6f 75  nterpret the fou
fde0: 72 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  r bytes at offse
fdf0: 74 20 58 20 69 6e 74 6f 20 74 68 65 20 70 61 67  t X into the pag
fe00: 65 20 61 73 20 61 20 34 2d 62 79 74 65 20 62 69  e as a 4-byte bi
fe10: 67 2d 65 6e 64 69 61 6e 0a 75 6e 73 69 67 6e 65  g-endian.unsigne
fe20: 64 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20  d integer.  Add 
fe30: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 61  the value of tha
fe40: 74 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65  t integer to the
fe50: 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53   checksum..<li>S
fe60: 75 62 74 72 61 63 65 20 32 30 30 20 66 72 6f 6d  ubtrace 200 from
fe70: 20 58 2e 0a 3c 6c 69 3e 49 66 20 58 20 69 73 20   X..<li>If X is 
fe80: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
fe90: 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 67  equal to zero, g
fea0: 6f 20 62 61 63 6b 20 74 6f 20 73 74 65 70 20 33  o back to step 3
feb0: 2e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68  ..</ol>)^..<p>Th
fec0: 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65  e checksum value
fed0: 20 69 73 20 75 73 65 64 20 74 6f 20 67 75 61 72   is used to guar
fee0: 64 20 61 67 61 69 6e 73 74 20 69 6e 63 6f 6d 70  d against incomp
fef0: 6c 65 74 65 20 77 72 69 74 65 73 20 6f 66 0a 61  lete writes of.a
ff00: 20 6a 6f 75 72 6e 61 6c 20 70 61 67 65 20 72 65   journal page re
ff10: 63 6f 72 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  cord following a
ff20: 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 2e 20   power failure. 
ff30: 20 41 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e   A different ran
ff40: 64 6f 6d 20 6e 6f 6e 63 65 0a 69 73 20 75 73 65  dom nonce.is use
ff50: 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 74 72  d each time a tr
ff60: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
ff70: 72 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  rted in order to
ff80: 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 69   minimize the ri
ff90: 73 6b 0a 74 68 61 74 20 75 6e 77 72 69 74 74 65  sk.that unwritte
ffa0: 6e 20 73 65 63 74 6f 72 73 20 6d 69 67 68 74 20  n sectors might 
ffb0: 62 79 20 63 68 61 6e 63 65 20 63 6f 6e 74 61 69  by chance contai
ffc0: 6e 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20  n data from the 
ffd0: 73 61 6d 65 20 70 61 67 65 0a 74 68 61 74 20 77  same page.that w
ffe0: 61 73 20 61 20 70 61 72 74 20 6f 66 20 70 72 69  as a part of pri
fff0: 6f 72 20 6a 6f 75 72 6e 61 6c 73 2e 20 20 42 79  or journals.  By
10000 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 6e 6f   changing the no
10010 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 74 72 61  nce for each.tra
10020 6e 73 61 63 74 69 6f 6e 2c 20 73 74 61 6c 65 20  nsaction, stale 
10030 64 61 74 61 20 6f 6e 20 64 69 73 6b 20 77 69 6c  data on disk wil
10040 6c 20 73 74 69 6c 6c 20 67 65 6e 65 72 61 74 65  l still generate
10050 20 61 6e 20 69 6e 63 6f 72 72 65 63 74 20 63 68   an incorrect ch
10060 65 63 6b 73 75 6d 0a 61 6e 64 20 62 65 20 64 65  ecksum.and be de
10070 74 65 63 74 65 64 20 77 69 74 68 20 68 69 67 68  tected with high
10080 20 70 72 6f 62 61 62 69 6c 69 74 79 2e 20 20 54   probability.  T
10090 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 6c 79  he checksum only
100a0 20 75 73 65 73 20 61 20 73 70 61 72 73 65 20 73   uses a sparse s
100b0 61 6d 70 6c 65 0a 6f 66 20 33 32 2d 62 69 74 20  ample.of 32-bit 
100c0 77 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20 64  words from the d
100d0 61 74 61 20 72 65 63 6f 72 64 20 66 6f 72 20 70  ata record for p
100e0 65 72 66 6f 72 6d 61 6e 63 65 20 72 65 61 73 6f  erformance reaso
100f0 6e 73 20 2d 20 64 65 73 69 67 6e 20 73 74 75 64  ns - design stud
10100 69 65 73 20 0a 64 75 72 69 6e 67 20 74 68 65 20  ies .during the 
10110 70 6c 61 6e 6e 69 6e 67 20 70 68 61 73 65 73 20  planning phases 
10120 6f 66 20 53 51 4c 69 74 65 20 33 2e 30 2e 30 20  of SQLite 3.0.0 
10130 73 68 6f 77 65 64 0a 61 20 73 69 67 6e 69 66 69  showed.a signifi
10140 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
10150 20 68 69 74 20 69 6e 20 63 68 65 63 6b 73 75 6d   hit in checksum
10160 6d 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20  ming the entire 
10170 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65  page.</p>..<p>Le
10180 74 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74  t the page count
10190 20 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74   value at offset
101a0 20 38 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61   8 in the journa
101b0 6c 20 68 65 61 64 65 72 20 62 65 20 4d 2e 0a 5e  l header be M..^
101c0 49 66 20 4d 20 69 73 20 67 72 65 61 74 65 72 20  If M is greater 
101d0 74 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 61  than zero then a
101e0 66 74 65 72 20 4d 20 70 61 67 65 20 72 65 63 6f  fter M page reco
101f0 72 64 73 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  rds the journal 
10200 66 69 6c 65 0a 6d 61 79 20 62 65 20 7a 65 72 6f  file.may be zero
10210 20 70 61 64 64 65 64 20 6f 75 74 20 74 6f 20 74   padded out to t
10220 68 65 20 6e 65 78 74 20 6d 75 6c 74 69 70 6c 65  he next multiple
10230 20 6f 66 20 74 68 65 20 73 65 63 74 6f 72 20 73   of the sector s
10240 69 7a 65 20 61 6e 64 20 61 6e 6f 74 68 65 72 0a  ize and another.
10250 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 6d  journal header m
10260 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  ay be inserted. 
10270 20 5e 41 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68 65   ^All journal he
10280 61 64 65 72 73 20 77 69 74 68 69 6e 20 74 68 65  aders within the
10290 20 73 61 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75   same.journal mu
102a0 73 74 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73  st contain the s
102b0 61 6d 65 20 64 61 74 61 62 61 73 65 20 70 61 67  ame database pag
102c0 65 20 73 69 7a 65 20 61 6e 64 20 73 65 63 74 6f  e size and secto
102d0 72 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  r size.</p>..<p>
102e0 5e 49 66 20 4d 20 69 73 20 2d 31 20 69 6e 20 74  ^If M is -1 in t
102f0 68 65 20 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e  he initial journ
10300 61 6c 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  al header, then 
10310 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
10320 67 65 20 72 65 63 6f 72 64 73 0a 74 68 61 74 20  ge records.that 
10330 66 6f 6c 6c 6f 77 20 69 73 20 63 6f 6d 70 75 74  follow is comput
10340 65 64 20 62 79 20 63 6f 6d 70 75 74 69 6e 67 20  ed by computing 
10350 68 6f 77 20 6d 61 6e 79 20 70 61 67 65 20 72 65  how many page re
10360 63 6f 72 64 73 20 77 69 6c 6c 20 66 69 74 20 69  cords will fit i
10370 6e 0a 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20  n.the available 
10380 73 70 61 63 65 20 6f 66 20 74 68 65 20 72 65 6d  space of the rem
10390 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 6a 6f  ainder of the jo
103a0 75 72 6e 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a  urnal file.</p>.
103b0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
103c0 74 20 77 61 6c 66 6f 72 6d 61 74 20 7b 57 41 4c  t walformat {WAL
103d0 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c   format}</tcl>.<
103e0 68 32 3e 34 2e 30 20 54 68 65 20 57 72 69 74 65  h2>4.0 The Write
103f0 2d 41 68 65 61 64 20 4c 6f 67 3c 2f 68 32 3e 0a  -Ahead Log</h2>.
10400 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69  .<p>Beginning wi
10410 74 68 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e  th [version 3.7.
10420 30 5d 2c 20 53 51 4c 69 74 65 20 73 75 70 70 6f  0], SQLite suppo
10430 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61  rts a new transa
10440 63 74 69 6f 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65  ction.control me
10450 63 68 61 6e 69 73 6d 20 63 61 6c 6c 65 64 20 22  chanism called "
10460 5b 57 41 4c 20 7c 20 77 72 69 74 65 2d 61 68 65  [WAL | write-ahe
10470 61 64 20 6c 6f 67 5d 22 20 6f 72 20 22 5b 57 41  ad log]" or "[WA
10480 4c 5d 22 2e 0a 5e 57 68 65 6e 20 61 20 64 61 74  L]"..^When a dat
10490 61 62 61 73 65 20 69 73 20 69 6e 20 57 41 4c 20  abase is in WAL 
104a0 6d 6f 64 65 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63  mode, all connec
104b0 74 69 6f 6e 73 20 74 6f 20 74 68 61 74 20 64 61  tions to that da
104c0 74 61 62 61 73 65 20 6d 75 73 74 0a 75 73 65 20  tabase must.use 
104d0 74 68 65 20 57 41 4c 2e 20 20 5e 41 20 70 61 72  the WAL.  ^A par
104e0 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
104f0 20 77 69 6c 6c 20 75 73 65 20 65 69 74 68 65 72   will use either
10500 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
10510 6e 61 6c 0a 6f 72 20 61 20 57 41 4c 2c 20 62 75  nal.or a WAL, bu
10520 74 20 6e 6f 74 20 62 6f 74 68 20 61 74 20 74 68  t not both at th
10530 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 5e 54 68  e same time..^Th
10540 65 20 57 41 4c 20 69 73 20 61 6c 77 61 79 73 20  e WAL is always 
10550 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20 73  located in the s
10560 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61 73  ame directory as
10570 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69   the database.fi
10580 6c 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73  le and has the s
10590 61 6d 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20  ame name as the 
105a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 75  database file bu
105b0 74 20 77 69 74 68 20 74 68 65 20 73 74 72 69 6e  t with the strin
105c0 67 0a 22 3c 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e  g."<tt>-wal</tt>
105d0 22 20 61 70 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a  " appended.</p>.
105e0 0a 3c 68 33 3e 34 2e 31 20 57 41 4c 20 46 69 6c  .<h3>4.1 WAL Fil
105f0 65 20 46 6f 72 6d 61 74 3c 2f 68 34 3e 0a 0a 3c  e Format</h4>..<
10600 70 3e 41 20 57 41 4c 20 66 69 6c 65 20 63 6f 6e  p>A WAL file con
10610 73 69 73 74 73 20 6f 66 20 61 20 68 65 61 64 65  sists of a heade
10620 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  r followed by ze
10630 72 6f 20 6f 72 20 6d 6f 72 65 20 22 66 72 61 6d  ro or more "fram
10640 65 73 22 2e 0a 45 61 63 68 20 66 72 61 6d 65 20  es"..Each frame 
10650 72 65 63 6f 72 64 73 20 74 68 65 20 72 65 76 69  records the revi
10660 73 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  sed content of a
10670 20 73 69 6e 67 6c 65 20 70 61 67 65 20 66 72 6f   single page fro
10680 6d 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  m the.database f
10690 69 6c 65 2e 20 20 41 6c 6c 20 63 68 61 6e 67 65  ile.  All change
106a0 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
106b0 65 20 61 72 65 20 72 65 63 6f 72 64 65 64 20 62  e are recorded b
106c0 79 20 77 72 69 74 69 6e 67 0a 66 72 61 6d 65 73  y writing.frames
106d0 20 69 6e 74 6f 20 74 68 65 20 57 41 4c 2e 20 20   into the WAL.  
106e0 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6d  Transactions com
106f0 6d 69 74 20 77 68 65 6e 20 61 20 66 72 61 6d 65  mit when a frame
10700 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 61 74   is written that
10710 0a 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6d 6d  .contains a comm
10720 69 74 20 6d 61 72 6b 65 72 2e 20 20 5e 41 20 73  it marker.  ^A s
10730 69 6e 67 6c 65 20 57 41 4c 20 63 61 6e 20 61 6e  ingle WAL can an
10740 64 20 75 73 75 61 6c 6c 79 20 64 6f 65 73 20 72  d usually does r
10750 65 63 6f 72 64 20 0a 6d 75 6c 74 69 70 6c 65 20  ecord .multiple 
10760 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 50  transactions.  P
10770 65 72 69 6f 64 69 63 61 6c 6c 79 2c 20 74 68 65  eriodically, the
10780 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
10790 57 41 4c 20 69 73 0a 74 72 61 6e 73 66 65 72 72  WAL is.transferr
107a0 65 64 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ed back into the
107b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
107c0 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63  n an operation c
107d0 61 6c 6c 65 64 20 61 0a 22 63 68 65 63 6b 70 6f  alled a."checkpo
107e0 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  int".</p>..<p>^A
107f0 20 73 69 6e 67 6c 65 20 57 41 4c 20 66 69 6c 65   single WAL file
10800 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 20 6d   can be reused m
10810 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 20 20  ultiple times.  
10820 5e 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  ^In other words,
10830 20 74 68 65 0a 57 41 4c 20 63 61 6e 20 66 69 6c   the.WAL can fil
10840 6c 20 75 70 20 77 69 74 68 20 66 72 61 6d 65 73  l up with frames
10850 20 61 6e 64 20 74 68 65 6e 20 62 65 20 63 68 65   and then be che
10860 63 6b 70 6f 69 6e 74 65 64 20 61 6e 64 20 74 68  ckpointed and th
10870 65 6e 20 6e 65 77 0a 66 72 61 6d 65 73 20 63 61  en new.frames ca
10880 6e 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  n overwrite the 
10890 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e 41 20 57 41  old ones.  ^A WA
108a0 4c 20 61 6c 77 61 79 73 20 67 72 6f 77 73 20 66  L always grows f
108b0 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 0a 74 6f  rom beginning.to
108c0 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 43  ward the end.  C
108d0 68 65 63 6b 73 75 6d 73 20 61 6e 64 20 63 6f 75  hecksums and cou
108e0 6e 74 65 72 73 20 61 74 74 61 63 68 65 64 20 74  nters attached t
108f0 6f 20 65 61 63 68 20 66 72 61 6d 65 20 61 72 65  o each frame are
10900 0a 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69  .used to determi
10910 6e 65 20 77 68 69 63 68 20 66 72 61 6d 65 73 20  ne which frames 
10920 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 20 61  within the WAL a
10930 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69  re valid and whi
10940 63 68 0a 61 72 65 20 6c 65 66 74 6f 76 65 72 73  ch.are leftovers
10950 20 66 72 6f 6d 20 70 72 69 6f 72 20 63 68 65 63   from prior chec
10960 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  kpoints.</p>..<p
10970 3e 5e 28 54 68 65 20 57 41 4c 20 68 65 61 64 65  >^(The WAL heade
10980 72 20 69 73 20 33 32 20 62 79 74 65 73 20 69 6e  r is 32 bytes in
10990 20 73 69 7a 65 20 61 6e 64 20 63 6f 6e 73 69 73   size and consis
109a0 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ts of the follow
109b0 69 6e 67 20 65 69 67 68 74 0a 62 69 67 2d 65 6e  ing eight.big-en
109c0 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69  dian 32-bit unsi
109d0 67 6e 65 64 20 69 6e 74 65 67 65 72 20 76 61 6c  gned integer val
109e0 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  ues:</p>..<cente
109f0 72 3e 0a 3c 69 3e 57 41 4c 20 48 65 61 64 65 72  r>.<i>WAL Header
10a00 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
10a10 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
10a20 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
10a30 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
10a40 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
10a50 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
10a60 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
10a70 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>0<td valign=t
10a80 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
10a90 34 0a 20 20 20 20 3c 74 64 3e 4d 61 67 69 63 20  4.    <td>Magic 
10aa0 6e 75 6d 62 65 72 2e 20 20 30 78 33 37 37 66 30  number.  0x377f0
10ab0 36 38 32 20 6f 72 20 30 78 33 37 37 66 30 36 38  682 or 0x377f068
10ac0 33 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  3.<tr><td valign
10ad0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
10ae0 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>4<td valign=to
10af0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
10b00 0a 20 20 20 20 3c 74 64 3e 46 69 6c 65 20 66 6f  .    <td>File fo
10b10 72 6d 61 74 20 76 65 72 73 69 6f 6e 2e 20 20 43  rmat version.  C
10b20 75 72 72 65 6e 74 6c 79 20 33 30 30 37 30 30 30  urrently 3007000
10b30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
10b40 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
10b50 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>8<td valign=to
10b60 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
10b70 0a 20 20 20 20 3c 74 64 3e 44 61 74 61 62 61 73  .    <td>Databas
10b80 65 20 70 61 67 65 20 73 69 7a 65 2e 20 20 45 78  e page size.  Ex
10b90 61 6d 70 6c 65 3a 20 31 30 32 34 0a 3c 74 72 3e  ample: 1024.<tr>
10ba0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
10bb0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74  lign=center>12<t
10bc0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
10bd0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
10be0 3c 74 64 3e 43 68 65 63 6b 70 6f 69 6e 74 20 73  <td>Checkpoint s
10bf0 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 0a 3c  equence number.<
10c00 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
10c10 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
10c20 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  6<td valign=top 
10c30 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
10c40 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 3a 20 72     <td>Salt-1: r
10c50 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20 69 6e  andom integer in
10c60 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
10c70 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c  ach checkpoint.<
10c80 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
10c90 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
10ca0 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
10cb0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
10cc0 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 3a 20 61     <td>Salt-2: a
10cd0 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f   different rando
10ce0 6d 20 6e 75 6d 62 65 72 20 66 6f 72 20 65 61 63  m number for eac
10cf0 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72  h checkpoint.<tr
10d00 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
10d10 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c  align=center>24<
10d20 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
10d30 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
10d40 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a   <td>Checksum-1:
10d50 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 61   First part of a
10d60 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65   checksum on the
10d70 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73 20   first 24 bytes 
10d80 6f 66 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74  of header.<tr><t
10d90 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
10da0 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64 20  gn=center>28<td 
10db0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
10dc0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
10dd0 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20 53 65  d>Checksum-2: Se
10de0 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 74 68 65  cond part of the
10df0 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65   checksum on the
10e00 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73 20   first 24 bytes 
10e10 6f 66 20 68 65 61 64 65 72 0a 3c 2f 74 61 62 6c  of header.</tabl
10e20 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  e>.</center>)^..
10e30 3c 70 3e 5e 49 6d 6d 65 64 69 61 74 65 6c 79 20  <p>^Immediately 
10e40 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 77 61  following the wa
10e50 6c 2d 68 65 61 64 65 72 20 61 72 65 20 7a 65 72  l-header are zer
10e60 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61 6d 65 73  o or more frames
10e70 2e 20 5e 45 61 63 68 0a 66 72 61 6d 65 20 63 6f  . ^Each.frame co
10e80 6e 73 69 73 74 73 20 6f 66 20 61 20 32 34 2d 62  nsists of a 24-b
10e90 79 74 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  yte frame-header
10ea0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 3c   followed by a <
10eb0 69 3e 70 61 67 65 2d 73 69 7a 65 3c 2f 69 3e 20  i>page-size</i> 
10ec0 62 79 74 65 73 0a 6f 66 20 70 61 67 65 20 64 61  bytes.of page da
10ed0 74 61 2e 20 5e 28 54 68 65 20 66 72 61 6d 65 2d  ta. ^(The frame-
10ee0 68 65 61 64 65 72 20 69 73 20 73 69 78 20 62 69  header is six bi
10ef0 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20  g-endian 32-bit 
10f00 75 6e 73 69 67 6e 65 64 20 0a 69 6e 74 65 67 65  unsigned .intege
10f10 72 20 76 61 6c 75 65 73 2c 20 61 73 20 66 6f 6c  r values, as fol
10f20 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a  lows:..<center>.
10f30 3c 69 3e 57 41 4c 20 46 72 61 6d 65 20 48 65 61  <i>WAL Frame Hea
10f40 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  der Format</i><b
10f50 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
10f60 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
10f70 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74  <tr><th>Offset<t
10f80 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69  h>Size<th>Descri
10f90 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61  ption.<tr><td va
10fa0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
10fb0 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67  enter>0<td valig
10fc0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
10fd0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 50 61 67  er>4.    <td>Pag
10fe0 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64  e number.<tr><td
10ff0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
11000 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61  n=center>4<td va
11010 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
11020 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
11030 46 6f 72 20 63 6f 6d 6d 69 74 20 72 65 63 6f 72  For commit recor
11040 64 73 2c 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ds, the size of 
11050 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
11060 65 20 69 6e 20 70 61 67 65 73 0a 20 20 20 20 20  e in pages.     
11070 20 20 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d     after the com
11080 6d 69 74 2e 20 20 46 6f 72 20 61 6c 6c 20 6f 74  mit.  For all ot
11090 68 65 72 20 72 65 63 6f 72 64 73 2c 20 7a 65 72  her records, zer
110a0 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  o..<tr><td valig
110b0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
110c0 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
110d0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
110e0 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31  4.    <td>Salt-1
110f0 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
11100 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e   WAL header.<tr>
11110 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11120 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74  lign=center>12<t
11130 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
11140 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
11150 3c 74 64 3e 53 61 6c 74 2d 32 20 63 6f 70 69 65  <td>Salt-2 copie
11160 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68  d from the WAL h
11170 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  eader.<tr><td va
11180 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
11190 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69  enter>16<td vali
111a0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
111b0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
111c0 65 63 6b 73 75 6d 2d 31 3a 20 20 43 75 6d 75 6c  ecksum-1:  Cumul
111d0 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 20 75  ative checksum u
111e0 70 20 74 68 72 6f 75 67 68 20 61 6e 64 20 69 6e  p through and in
111f0 63 6c 75 64 69 6e 67 20 74 68 69 73 20 70 61 67  cluding this pag
11200 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  e.<tr><td valign
11210 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11220 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>20<td valign=t
11230 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
11240 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73  4.    <td>Checks
11250 75 6d 2d 32 3a 20 20 53 65 63 6f 6e 64 20 68 61  um-2:  Second ha
11260 6c 66 20 6f 66 20 74 68 65 20 63 75 6d 75 6c 61  lf of the cumula
11270 74 69 76 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c  tive checksum..<
11280 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
11290 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72 61 6d  >)^..^(<p>A fram
112a0 65 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  e is considered 
112b0 76 61 6c 69 64 20 69 66 20 61 6e 64 20 6f 6e 6c  valid if and onl
112c0 79 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y if the followi
112d0 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72  ng conditions ar
112e0 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c  e.true:</p>..<ol
112f0 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 61 6c  >.<li><p>The sal
11300 74 2d 31 20 61 6e 64 20 73 61 6c 74 2d 32 20 76  t-1 and salt-2 v
11310 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 72 61  alues in the fra
11320 6d 65 2d 68 65 61 64 65 72 20 6d 61 74 63 68 0a  me-header match.
11330 20 20 20 20 20 20 20 73 61 6c 74 20 76 61 6c 75         salt valu
11340 65 73 20 69 6e 20 74 68 65 20 77 61 6c 2d 68 65  es in the wal-he
11350 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ader</p></li>..<
11360 6c 69 3e 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  li><p>The checks
11370 75 6d 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  um values in the
11380 20 66 69 6e 61 6c 20 38 20 62 79 74 65 73 20 6f   final 8 bytes o
11390 66 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61 64  f the frame-head
113a0 65 72 0a 20 20 20 20 20 20 20 65 78 61 63 74 6c  er.       exactl
113b0 79 20 6d 61 74 63 68 20 74 68 65 20 63 68 65 63  y match the chec
113c0 6b 73 75 6d 20 63 6f 6d 70 75 74 65 64 20 63 6f  ksum computed co
113d0 6e 73 65 63 75 74 69 76 65 6c 79 20 6f 6e 20 74  nsecutively on t
113e0 68 65 0a 20 20 20 20 20 20 20 57 41 4c 20 68 65  he.       WAL he
113f0 61 64 65 72 20 61 6e 64 20 74 68 65 20 66 69 72  ader and the fir
11400 73 74 20 38 20 62 79 74 65 73 20 61 6e 64 20 74  st 8 bytes and t
11410 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c  he content of al
11420 6c 20 66 72 61 6d 65 73 0a 20 20 20 20 20 20 20  l frames.       
11430 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  up to and includ
11440 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20  ing the current 
11450 66 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c  frame.</p></li><
11460 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74  /li>.</ol>)^..<t
11470 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77  cl>hd_fragment w
11480 61 6c 63 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63  alcksm {WAL chec
11490 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c  ksum algorithm}<
114a0 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 32 20 43 68  /tcl>.<h3>4.2 Ch
114b0 65 63 6b 73 75 6d 20 41 6c 67 6f 72 69 74 68 6d  ecksum Algorithm
114c0 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 68  </h3>..<p>The ch
114d0 65 63 6b 73 75 6d 20 69 73 20 63 6f 6d 70 75 74  ecksum is comput
114e0 65 64 20 62 79 20 69 6e 74 65 72 70 72 65 74 69  ed by interpreti
114f0 6e 67 20 74 68 65 20 69 6e 70 75 74 20 61 73 0a  ng the input as.
11500 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f  an even number o
11510 66 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62 69  f unsigned 32-bi
11520 74 20 69 6e 74 65 67 65 72 73 3a 20 78 28 30 29  t integers: x(0)
11530 20 74 68 72 6f 75 67 68 20 78 28 4e 29 2e 0a 5e   through x(N)..^
11540 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
11550 65 72 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69  ers are big-endi
11560 61 6e 20 69 66 20 74 68 65 0a 6d 61 67 69 63 20  an if the.magic 
11570 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 66 69  number in the fi
11580 72 73 74 20 34 20 62 79 74 65 73 20 6f 66 20 74  rst 4 bytes of t
11590 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 69 73  he WAL header is
115a0 20 30 78 33 37 37 66 30 36 38 33 20 61 6e 64 0a   0x377f0683 and.
115b0 74 68 65 20 69 6e 74 65 67 65 72 73 20 61 72 65  the integers are
115c0 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 74   little-endian t
115d0 68 65 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20  he magic number 
115e0 69 73 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e  is 0x377f0682..^
115f0 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c  The checksum val
11600 75 65 73 20 61 72 65 20 61 6c 77 61 79 73 20 73  ues are always s
11610 74 6f 72 65 64 20 69 6e 20 74 68 65 20 66 72 61  tored in the fra
11620 6d 65 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62  me header in a.b
11630 69 67 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74  ig-endian format
11640 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
11650 68 69 63 68 20 62 79 74 65 20 6f 72 64 65 72 20  hich byte order 
11660 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75  is used to compu
11670 74 65 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e  te.the checksum.
11680 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65  </p>..<p>The che
11690 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20  cksum algorithm 
116a0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
116b0 6f 6e 74 65 6e 74 20 77 68 69 63 68 20 69 73 20  ontent which is 
116c0 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20  a multiple of.8 
116d0 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
116e0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
116f0 2c 20 69 66 20 74 68 65 20 69 6e 70 75 74 73 20  , if the inputs 
11700 61 72 65 20 78 28 30 29 20 74 68 72 6f 75 67 68  are x(0) through
11710 20 78 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73   x(N).then N mus
11720 74 20 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20  t be odd..^(The 
11730 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74  checksum algorit
11740 68 6d 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  hm is as follows
11750 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
11760 70 72 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20  pre> .s0 = s1 = 
11770 30 0a 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74  0.for i from 0 t
11780 6f 20 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20  o n-1 step 2:.  
11790 20 73 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31   s0 += x(i) + s1
117a0 3b 0a 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31  ;.   s1 += x(i+1
117b0 29 20 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23  ) + s0;.endfor.#
117c0 20 72 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e   result in s0 an
117d0 64 20 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d s1.</pre></blo
117e0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e  ckquote>)^..<p>^
117f0 54 68 65 20 6f 75 74 70 75 74 73 20 73 30 20 61  The outputs s0 a
11800 6e 64 20 73 31 20 61 72 65 20 62 6f 74 68 20 77  nd s1 are both w
11810 65 69 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d  eighted checksum
11820 73 20 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63  s using Fibonacc
11830 69 20 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76  i weights.in rev
11840 65 72 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54  erse order.  (^T
11850 68 65 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e  he largest Fibon
11860 61 63 63 69 20 77 65 69 67 68 74 20 6f 63 63 75  acci weight occu
11870 72 73 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  rs on the first 
11880 65 6c 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73  element.of the s
11890 65 71 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75  equence being su
118a0 6d 6d 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20  mmed.)  ^The s1 
118b0 76 61 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20  value spans all 
118c0 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74  32-bit integer.t
118d0 65 72 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75  erms of the sequ
118e0 65 6e 63 65 20 77 68 65 72 65 61 73 20 73 30 20  ence whereas s0 
118f0 6f 6d 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20  omits the final 
11900 74 65 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34  term.</p>..<h3>4
11910 2e 33 20 43 68 65 63 6b 70 6f 69 6e 74 20 41 6c  .3 Checkpoint Al
11920 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70  gorithm</h3>..<p
11930 3e 5e 4f 6e 20 61 20 5b 63 68 65 63 6b 70 6f 69  >^On a [checkpoi
11940 6e 74 5d 2c 20 74 68 65 20 57 41 4c 20 69 73 20  nt], the WAL is 
11950 66 69 72 73 74 20 66 6c 75 73 68 65 64 20 74 6f  first flushed to
11960 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72   persistent stor
11970 61 67 65 20 75 73 69 6e 67 0a 74 68 65 20 78 53  age using.the xS
11980 79 6e 63 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  ync method of th
11990 65 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65  e [sqlite3_io_me
119a0 74 68 6f 64 73 20 7c 20 56 46 53 5d 2e 20 0a 5e  thods | VFS]. .^
119b0 54 68 65 6e 20 76 61 6c 69 64 20 63 6f 6e 74 65  Then valid conte
119c0 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73  nt of the WAL is
119d0 20 74 72 61 6e 73 66 65 72 72 65 64 20 69 6e 74   transferred int
119e0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
119f0 69 6c 65 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74  ile..^Finally, t
11a00 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66  he database is f
11a10 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69 73  lushed to persis
11a20 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69  tent storage usi
11a30 6e 67 20 61 6e 6f 74 68 65 72 0a 78 53 79 6e 63  ng another.xSync
11a40 20 6d 65 74 68 6f 64 20 63 61 6c 6c 2e 0a 54 68   method call..Th
11a50 65 20 78 53 79 6e 63 20 6f 70 65 72 61 74 69 6f  e xSync operatio
11a60 6e 73 20 73 65 72 76 65 20 61 73 20 77 72 69 74  ns serve as writ
11a70 65 20 62 61 72 72 69 65 72 73 20 2d 20 61 6c 6c  e barriers - all
11a80 20 77 72 69 74 65 73 20 6c 61 75 6e 63 68 65 64   writes launched
11a90 0a 62 65 66 6f 72 65 20 74 68 65 20 78 53 79 6e  .before the xSyn
11aa0 63 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  c must complete 
11ab0 62 65 66 6f 72 65 20 61 6e 79 20 77 72 69 74 65  before any write
11ac0 20 74 68 61 74 20 6c 61 75 6e 63 68 65 73 20 61   that launches a
11ad0 66 74 65 72 20 74 68 65 0a 78 53 79 6e 63 20 62  fter the.xSync b
11ae0 65 67 69 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  egins.</p>..<p>^
11af0 41 66 74 65 72 20 65 61 63 68 20 63 68 65 63 6b  After each check
11b00 70 6f 69 6e 74 2c 20 74 68 65 20 57 41 4c 20 68  point, the WAL h
11b10 65 61 64 65 72 20 73 61 6c 74 2d 31 20 76 61 6c  eader salt-1 val
11b20 75 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ue is incremente
11b30 64 20 61 6e 64 20 74 68 65 20 0a 73 61 6c 74 2d  d and the .salt-
11b40 32 20 76 61 6c 75 65 20 69 73 20 72 61 6e 64 6f  2 value is rando
11b50 6d 69 7a 65 64 2e 20 20 54 68 69 73 20 70 72 65  mized.  This pre
11b60 76 65 6e 74 73 20 6f 6c 64 20 61 6e 64 20 6e 65  vents old and ne
11b70 77 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20  w frames in the 
11b80 57 41 4c 20 66 72 6f 6d 0a 62 65 69 6e 67 20 63  WAL from.being c
11b90 6f 6e 73 69 64 65 72 65 64 20 76 61 6c 69 64 20  onsidered valid 
11ba0 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
11bb0 20 61 6e 64 20 62 65 69 6e 67 20 63 68 65 63 6b   and being check
11bc0 70 6f 69 6e 74 69 6e 67 20 74 6f 67 65 74 68 65  pointing togethe
11bd0 72 0a 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 63 72  r.following a cr
11be0 61 73 68 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ash.</p>..<tcl>h
11bf0 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 72 65  d_fragment walre
11c00 61 64 20 7b 57 41 4c 20 72 65 61 64 20 61 6c 67  ad {WAL read alg
11c10 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68  orithm}</tcl>.<h
11c20 33 3e 34 2e 34 20 52 65 61 64 65 72 20 41 6c 67  3>4.4 Reader Alg
11c30 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e  orithm</h3>..<p>
11c40 5e 28 54 6f 20 72 65 61 64 20 61 20 70 61 67 65  ^(To read a page
11c50 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
11c60 73 65 20 28 63 61 6c 6c 20 69 74 20 70 61 67 65  se (call it page
11c70 20 6e 75 6d 62 65 72 20 50 29 2c 20 61 20 72 65   number P), a re
11c80 61 64 65 72 0a 66 69 72 73 74 20 63 68 65 63 6b  ader.first check
11c90 73 20 74 68 65 20 57 41 4c 20 74 6f 20 73 65 65  s the WAL to see
11ca0 20 69 66 20 69 74 20 63 6f 6e 74 61 69 6e 73 20   if it contains 
11cb0 70 61 67 65 20 50 2e 20 20 49 66 20 73 6f 2c 20  page P.  If so, 
11cc0 74 68 65 6e 20 74 68 65 0a 6c 61 73 74 20 76 61  then the.last va
11cd0 6c 69 64 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  lid instance of 
11ce0 70 61 67 65 20 50 20 74 68 61 74 20 69 73 20 66  page P that is f
11cf0 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
11d00 6d 69 74 20 66 72 61 6d 65 0a 6f 72 20 69 73 20  mit frame.or is 
11d10 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 20 69  a commit frame i
11d20 74 73 65 6c 66 20 62 65 63 6f 6d 65 73 20 74 68  tself becomes th
11d30 65 20 76 61 6c 75 65 20 72 65 61 64 2e 29 5e 20  e value read.)^ 
11d40 20 5e 49 66 20 74 68 65 20 57 41 4c 0a 63 6f 6e   ^If the WAL.con
11d50 74 61 69 6e 73 20 6e 6f 20 63 6f 70 69 65 73 20  tains no copies 
11d60 6f 66 20 70 61 67 65 20 50 20 74 68 61 74 20 61  of page P that a
11d70 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69  re valid and whi
11d80 63 68 20 61 72 65 20 61 20 63 6f 6d 6d 69 74 0a  ch are a commit.
11d90 66 72 61 6d 65 20 6f 72 20 61 72 65 20 66 6f 6c  frame or are fol
11da0 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69  lowed by a commi
11db0 74 20 66 72 61 6d 65 2c 20 74 68 65 6e 20 70 61  t frame, then pa
11dc0 67 65 20 50 20 69 73 20 72 65 61 64 20 66 72 6f  ge P is read fro
11dd0 6d 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m.the database f
11de0 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20  ile.</p>..<p>To 
11df0 73 74 61 72 74 20 61 20 72 65 61 64 20 74 72 61  start a read tra
11e00 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 72 65  nsaction, the re
11e10 61 64 65 72 20 72 65 63 6f 72 64 73 20 74 68 65  ader records the
11e20 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 6c 61   index of the la
11e30 73 74 0a 76 61 6c 69 64 20 66 72 61 6d 65 20 69  st.valid frame i
11e40 6e 20 74 68 65 20 57 41 4c 2e 20 20 54 68 65 20  n the WAL.  The 
11e50 72 65 61 64 65 72 20 75 73 65 73 20 74 68 69 73  reader uses this
11e60 20 72 65 63 6f 72 64 65 64 20 22 6d 78 46 72 61   recorded "mxFra
11e70 6d 65 22 20 76 61 6c 75 65 0a 66 6f 72 20 61 6c  me" value.for al
11e80 6c 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 61  l subsequent rea
11e90 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 4e  d operations.  N
11ea0 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  ew transactions 
11eb0 63 61 6e 20 62 65 20 61 70 70 65 6e 64 65 64 0a  can be appended.
11ec0 74 6f 20 74 68 65 20 57 41 4c 2c 20 62 75 74 20  to the WAL, but 
11ed0 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 72  as long as the r
11ee0 65 61 64 65 72 20 75 73 65 73 20 69 74 73 20 6f  eader uses its o
11ef0 72 69 67 69 6e 61 6c 20 6d 78 46 72 61 6d 65 20  riginal mxFrame 
11f00 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e 6f 72 65  value.and ignore
11f10 73 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61  s subsequently a
11f20 70 70 65 6e 64 65 64 20 63 6f 6e 74 65 6e 74 2c  ppended content,
11f30 20 74 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c   the reader will
11f40 20 73 65 65 20 61 20 0a 63 6f 6e 73 69 73 74 65   see a .consiste
11f50 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f 66 20 74  nt snapshot of t
11f60 68 65 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d  he database from
11f70 20 61 20 73 69 6e 67 6c 65 20 70 6f 69 6e 74 20   a single point 
11f80 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54 68 69 73  in time.  .^This
11f90 20 74 65 63 68 6e 69 71 75 65 20 61 6c 6c 6f 77   technique allow
11fa0 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e 63 75  s multiple concu
11fb0 72 72 65 6e 74 20 72 65 61 64 65 72 73 20 74 6f  rrent readers to
11fc0 20 76 69 65 77 20 64 69 66 66 65 72 65 6e 74 20   view different 
11fd0 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65  .versions of the
11fe0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e   database conten
11ff0 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79  t simultaneously
12000 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
12010 61 64 65 72 20 61 6c 67 6f 72 69 74 68 6d 20 69  ader algorithm i
12020 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70  n the previous p
12030 61 72 61 67 72 61 70 68 73 20 77 6f 72 6b 73 20  aragraphs works 
12040 63 6f 72 72 65 63 74 6c 79 2c 20 62 75 74 20 0a  correctly, but .
12050 62 65 63 61 75 73 65 20 66 72 61 6d 65 73 20 66  because frames f
12060 6f 72 20 70 61 67 65 20 50 20 63 61 6e 20 61 70  or page P can ap
12070 70 65 61 72 20 61 6e 79 77 68 65 72 65 20 77 69  pear anywhere wi
12080 74 68 69 6e 20 74 68 65 20 57 41 4c 2c 20 74 68  thin the WAL, th
12090 65 0a 72 65 61 64 65 72 20 68 61 73 20 74 6f 20  e.reader has to 
120a0 73 63 61 6e 20 74 68 65 20 65 6e 74 69 72 65 20  scan the entire 
120b0 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  WAL looking for 
120c0 70 61 67 65 20 50 20 66 72 61 6d 65 73 2e 20 20  page P frames.  
120d0 49 66 20 74 68 65 0a 57 41 4c 20 69 73 20 6c 61  If the.WAL is la
120e0 72 67 65 20 28 6d 75 6c 74 69 70 6c 65 20 6d 65  rge (multiple me
120f0 67 61 62 79 74 65 73 20 69 73 20 74 79 70 69 63  gabytes is typic
12100 61 6c 29 20 74 68 61 74 20 73 63 61 6e 20 63 61  al) that scan ca
12110 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e 64 20 72  n be slow,.and r
12120 65 61 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ead performance 
12130 73 75 66 66 65 72 73 2e 20 20 5e 54 6f 20 6f 76  suffers.  ^To ov
12140 65 72 63 6f 6d 65 20 74 68 69 73 20 70 72 6f 62  ercome this prob
12150 6c 65 6d 2c 20 61 20 73 65 70 61 72 61 74 65 0a  lem, a separate.
12160 64 61 74 61 20 73 74 72 75 63 74 75 72 65 20 63  data structure c
12170 61 6c 6c 65 64 20 74 68 65 20 77 61 6c 2d 69 6e  alled the wal-in
12180 64 65 78 20 69 73 20 6d 61 69 6e 74 61 69 6e 65  dex is maintaine
12190 64 20 74 6f 20 65 78 70 65 64 69 74 65 20 74 68  d to expedite th
121a0 65 0a 73 65 61 72 63 68 20 66 6f 72 20 66 72 61  e.search for fra
121b0 6d 65 73 20 6f 66 20 61 20 70 61 72 74 69 63 75  mes of a particu
121c0 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c  lar page.</p>..<
121d0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
121e0 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61 74 20 7b  walindexformat {
121f0 77 61 6c 2d 69 6e 64 65 78 7d 20 7b 57 41 4c 2d  wal-index} {WAL-
12200 69 6e 64 65 78 20 66 6f 72 6d 61 74 7d 3c 2f 74  index format}</t
12210 63 6c 3e 0a 3c 68 33 3e 34 2e 35 20 57 41 4c 2d  cl>.<h3>4.5 WAL-
12220 49 6e 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 33  Index Format</h3
12230 3e 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c  >..<p>Conceptual
12240 6c 79 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  ly, the wal-inde
12250 78 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f  x is shared memo
12260 72 79 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63  ry, though the c
12270 75 72 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65  urrent.VFS imple
12280 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61  mentations use a
12290 20 6d 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f   mmapped file fo
122a0 72 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e  r the wal-index.
122b0 20 20 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a 66    ^The mmapped.f
122c0 69 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73 61  ile is in the sa
122d0 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61 73 20  me directory as 
122e0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
122f0 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61   has the same na
12300 6d 65 0a 61 73 20 74 68 65 20 64 61 74 61 62 61  me.as the databa
12310 73 65 20 77 69 74 68 20 61 20 22 3c 74 74 3e 2d  se with a "<tt>-
12320 73 68 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69 78  shm</tt>" suffix
12330 20 61 70 70 65 6e 64 65 64 2e 20 20 42 65 63 61   appended.  Beca
12340 75 73 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65  use.the wal-inde
12350 78 20 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f  x is shared memo
12360 72 79 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20  ry, SQLite does 
12370 6e 6f 74 20 73 75 70 70 6f 72 74 20 0a 5b 50 52  not support .[PR
12380 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  AGMA journal_mod
12390 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  e | journal_mode
123a0 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77  =WAL] .on a netw
123b0 6f 72 6b 20 66 69 6c 65 73 79 73 74 65 6d 20 77  ork filesystem w
123c0 68 65 6e 20 63 6c 69 65 6e 74 73 20 61 72 65 20  hen clients are 
123d0 6f 6e 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63  on different mac
123e0 68 69 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73  hines..All users
123f0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
12400 20 6d 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f   must be able to
12410 20 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20   share the same 
12420 6d 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e  memory.</p>..<p>
12430 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74  The purpose of t
12440 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
12450 74 6f 20 61 6e 73 77 65 72 20 74 68 69 73 20 71  to answer this q
12460 75 65 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a  uestion quickly:
12470 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
12480 65 3e 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61  e><i>.Given a pa
12490 67 65 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20  ge number P and 
124a0 61 20 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72  a maximum WAL fr
124b0 61 6d 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74  ame index M,.ret
124c0 75 72 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20  urn the largest 
124d0 57 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20  WAL frame index 
124e0 66 6f 72 20 70 61 67 65 20 50 20 74 68 61 74 20  for page P that 
124f0 64 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20  does not exceed 
12500 4d 2c 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55  M, .or return NU
12510 4c 4c 20 69 66 20 74 68 65 72 65 20 61 72 65 20  LL if there are 
12520 6e 6f 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61  no frames for pa
12530 67 65 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74  ge P that do not
12540 20 65 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c   exceed M..</i><
12550 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
12560 3e 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61  >The <i>M</i> va
12570 6c 75 65 20 69 6e 20 74 68 65 20 70 72 65 76 69  lue in the previ
12580 6f 75 73 20 70 61 72 61 67 72 61 70 68 20 69 73  ous paragraph is
12590 20 74 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76   the "mxFrame" v
125a0 61 6c 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20  alue.defined in 
125b0 5b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69  [WAL read algori
125c0 74 68 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e  thm | section 4.
125d0 34 5d 20 74 68 61 74 20 69 73 20 72 65 61 64 20  4] that is read 
125e0 61 74 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66  at the start .of
125f0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61   a transaction a
12600 6e 64 20 77 68 69 63 68 20 64 65 66 69 6e 65 73  nd which defines
12610 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61   the maximum fra
12620 6d 65 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20  me from the WAL 
12630 74 68 61 74 20 0a 74 68 65 20 72 65 61 64 65 72  that .the reader
12640 20 77 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a   will use.</p>..
12650 3c 70 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78  <p>The wal-index
12660 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20   is transient.  
12670 41 66 74 65 72 20 61 20 63 72 61 73 68 2c 20 74  After a crash, t
12680 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a  he wal-index is.
12690 72 65 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72  reconstructed fr
126a0 6f 6d 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  om the original 
126b0 57 41 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20  WAL file.  ^The 
126c0 56 46 53 20 69 73 20 72 65 71 75 69 72 65 64 0a  VFS is required.
126d0 74 6f 20 65 69 74 68 65 72 20 74 72 75 6e 63 61  to either trunca
126e0 74 65 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68  te or zero the h
126f0 65 61 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c  eader of the wal
12700 2d 69 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20  -index when the 
12710 6c 61 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20  last.connection 
12720 74 6f 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42  to it closes.  B
12730 65 63 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69  ecause the wal-i
12740 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e  ndex is transien
12750 74 2c 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e  t, it can.use an
12760 20 61 72 63 68 69 74 65 63 74 75 72 65 2d 73 70   architecture-sp
12770 65 63 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69  ecific format; i
12780 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  t does not have 
12790 74 6f 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74  to be cross-plat
127a0 66 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c  form..Hence, unl
127b0 69 6b 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ike the database
127c0 20 61 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f   and WAL file fo
127d0 72 6d 61 74 73 20 77 68 69 63 68 20 73 74 6f 72  rmats which stor
127e0 65 20 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20  e all values.as 
127f0 62 69 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20  big endian, the 
12800 77 61 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73  wal-index stores
12810 20 6d 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75   multi-byte valu
12820 65 73 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65  es in the native
12830 0a 62 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74  .byte order of t
12840 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72  he host computer
12850 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64  .</p>..<p>This d
12860 6f 63 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65  ocument is conce
12870 72 6e 65 64 20 77 69 74 68 20 74 68 65 20 70 65  rned with the pe
12880 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f  rsistent state o
12890 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66  f the database.f
128a0 69 6c 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74  ile, and since t
128b0 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
128c0 61 20 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75  a transient stru
128d0 63 74 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65  cture, no furthe
128e0 72 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  r .information a
128f0 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20  bout the format 
12900 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
12910 20 77 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65   will be provide
12920 64 20 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65  d here..Complete
12930 20 64 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20   details on the 
12940 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61  format of the wa
12950 6c 2d 69 6e 64 65 78 20 61 72 65 20 63 6f 6e 74  l-index are cont
12960 61 69 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d  ained within.com
12970 6d 65 6e 74 73 20 69 6e 20 53 51 4c 69 74 65 20  ments in SQLite 
12980 73 6f 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e  source code.</p>
12990 0a                                               .