Documentation Source Text

Hex Artifact Content
Login

Artifact f5e9fd94d010611bf817e871faa7935f6fafb190:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c 65 74  ..<p>The complet
0140: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0150: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
0160: 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61 69 6e   usually.contain
0170: 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  ed a single file
0180: 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65 64 20   on disk called 
0190: 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61 62 61  the "main databa
01a0: 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c  se file".</p>..<
01b0: 70 3e 44 75 72 69 6e 67 20 61 20 74 72 61 6e 73  p>During a trans
01c0: 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20 73  action, SQLite s
01d0: 74 6f 72 65 73 20 61 64 64 69 74 69 6f 6e 61 6c  tores additional
01e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 0a 69 6e   information .in
01f0: 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65 20 63   a second file c
0200: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c 6c 62  alled the "rollb
0210: 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2c 20 6f 72  ack journal", or
0220: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
0230: 0a 5b 57 41 4c 20 6d 6f 64 65 5d 2c 20 61 20 77  .[WAL mode], a w
0240: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
0250: 69 6c 65 2e 0a 49 66 20 74 68 65 20 61 70 70 6c  ile..If the appl
0260: 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20  ication or.host 
0270: 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73  computer crashes
0280: 20 62 65 66 6f 72 65 20 74 68 65 20 74 72 61 6e   before the tran
0290: 73 61 63 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65  saction complete
02a0: 73 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c  s, then the roll
02b0: 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
02c0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
02d0: 63 6f 6e 74 61 69 6e 73 20 63 72 69 74 69 63 61  contains critica
02e0: 6c 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  l state informat
02f0: 69 6f 6e 20 6e 65 65 64 65 64 20 0a 74 6f 20 72  ion needed .to r
0300: 65 73 74 6f 72 65 20 74 68 65 20 6d 61 69 6e 20  estore the main 
0310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
0320: 20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   a consistent st
0330: 61 74 65 2e 20 20 57 68 65 6e 20 61 20 72 6f 6c  ate.  When a rol
0340: 6c 62 61 63 6b 20 0a 6a 6f 75 72 6e 61 6c 20 6f  lback .journal o
0350: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
0360: 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  g contains infor
0370: 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79  mation necessary
0380: 20 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20   for recovering 
0390: 0a 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68  .the state of th
03a0: 65 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 79  e database, they
03b0: 20 61 72 65 20 63 61 6c 6c 65 64 20 61 20 22 68   are called a "h
03c0: 6f 74 20 6a 6f 75 72 6e 61 6c 22 20 6f 72 20 22  ot journal" or "
03d0: 68 6f 74 20 57 41 4c 20 66 69 6c 65 22 2e 0a 48  hot WAL file"..H
03e0: 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 61 6e 64 20  ot journals and 
03f0: 57 41 4c 20 66 69 6c 65 73 20 61 72 65 20 6f 6e  WAL files are on
0400: 6c 79 20 61 20 66 61 63 74 6f 72 20 64 75 72 69  ly a factor duri
0410: 6e 67 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72  ng error recover
0420: 79 0a 73 63 65 6e 61 72 69 6f 73 20 61 6e 64 20  y.scenarios and 
0430: 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c  so are uncommon,
0440: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61   but they are pa
0450: 72 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20  rt of the state 
0460: 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74  of an SQLite.dat
0470: 61 62 61 73 65 20 61 6e 64 20 73 6f 20 63 61 6e  abase and so can
0480: 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20  not be ignored. 
0490: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64   This document d
04a0: 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
04b0: 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20  t.of a rollback 
04c0: 6a 6f 75 72 6e 61 6c 20 61 6e 64 20 74 68 65 20  journal and the 
04d0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
04e0: 66 69 6c 65 2c 20 62 75 74 20 74 68 65 20 66 6f  file, but the fo
04f0: 63 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d 61  cus is.on the ma
0500: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
0510: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20 50  .</p>..<h3>1.1 P
0520: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ages</h3>..<p>Th
0530: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
0540: 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  file consists of
0550: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67   one or more pag
0560: 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  es.  ^The size o
0570: 66 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f  f a.page is a po
0580: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
0590: 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36  en 512 and 65536
05a0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c   inclusive.  All
05b0: 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68   pages within.th
05c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
05d0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a  are the same siz
05e0: 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69  e.  ^The page si
05f0: 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ze for a databas
0600: 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d  e file.is determ
0610: 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79  ined by the 2-by
0620: 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74  te integer locat
0630: 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  ed at an offset 
0640: 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d  of.16 bytes from
0650: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0660: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
0670: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67  ile.</p>..<p>Pag
0680: 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20  es are numbered 
0690: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
06a0: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  .  The maximum p
06b0: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31  age number is.21
06c0: 34 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e  47483646 (2<sup>
06d0: 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c  <small>31</small
06e0: 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54  ></sup> - 2).  T
06f0: 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a  he minimum size.
0700: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0710: 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d  is a single 512-
0720: 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d  byte page..The m
0730: 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61  aximum size data
0740: 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31  base would be 21
0750: 34 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61  47483646 pages a
0760: 74 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65  t 65536 bytes pe
0770: 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33  r.page or 140,73
0780: 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79  7,488,224,256 by
0790: 74 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74  tes (about 140 t
07a0: 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61  erabytes).  Usua
07b0: 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  lly SQLite will.
07c0: 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  hit the maximum 
07d0: 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  file size limit 
07e0: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
07f0: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20  g filesystem or 
0800: 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69  disk.hardware si
0810: 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65  ze limit long be
0820: 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73  fore it hits its
0830: 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69   own internal si
0840: 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c  ze limit.</p>..<
0850: 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c  p>In common use,
0860: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
0870: 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20  s tend to range 
0880: 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66  in size from a f
0890: 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20  ew kilobytes.to 
08a0: 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e  a few gigabytes.
08b0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
08c0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
08d0: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
08e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
08f0: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
0900: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
0910: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
0920: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
0930: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
0940: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0950: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0960: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0970: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0980: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0990: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
09a0: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
09b0: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
09c0: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
09d0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
09e0: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
09f0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0a00: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0a10: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0a20: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0a30: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0a40: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0a50: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0a60: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72  .</p>..<p>^All r
0a70: 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72  eads from and wr
0a80: 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e  ites to the main
0a90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
0aa0: 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62  egin at a page.b
0ab0: 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20  oundary and all 
0ac0: 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e  writes are an in
0ad0: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
0ae0: 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20  pages in size.  
0af0: 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20  ^Reads.are also 
0b00: 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67  usually an integ
0b10: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  er number of pag
0b20: 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68  es in size, with
0b30: 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69   the one excepti
0b40: 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65  on.that when the
0b50: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
0b60: 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66  st opened, the f
0b70: 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f  irst 100 bytes o
0b80: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
0b90: 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73  ile (the databas
0ba0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61  e file header) a
0bb0: 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62  re read as a sub
0bc0: 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e  -page size unit.
0bd0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65  </p>..<p>^Before
0be0: 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   any information
0bf0: 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66  -bearing page of
0c00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0c10: 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20   modified, .the 
0c20: 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66  original unmodif
0c30: 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  ied content of t
0c40: 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74  hat page is writ
0c50: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f  ten into the .ro
0c60: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
0c70: 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   If a transactio
0c80: 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  n is interrupted
0c90: 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65   and needs to be
0ca0: 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74   .rolled back, t
0cb0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
0cc0: 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20  nal can then be 
0cd0: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
0ce0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
0cf0: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61  its original sta
0d00: 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c  te.  ^Freelist l
0d10: 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e  eaf pages bear n
0d20: 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  o.information th
0d30: 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f  at would need to
0d40: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20   be restored on 
0d50: 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  a rollback and s
0d60: 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77  o they.are not w
0d70: 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f  ritten to the jo
0d80: 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d  urnal prior to m
0d90: 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20  odification, in 
0da0: 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20  order to.reduce 
0db0: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
0dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0dd0: 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20  database_header 
0de0: 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72  {database header
0df0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20  }</tcl>.<h3>1.2 
0e00: 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61  The Database Hea
0e10: 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  der</h3>..<p>The
0e20: 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73   first 100 bytes
0e30: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0e40: 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74   file comprise t
0e50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0e60: 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64   .header.  The d
0e70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
0e80: 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69  der is divided i
0e90: 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68  nto fields as sh
0ea0: 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65  own by.the table
0eb0: 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c   below.  All mul
0ec0: 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e  tibyte fields in
0ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0ee0: 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74  le header are.st
0ef0: 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 6f  ored with the mo
0f00: 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  st significant b
0f10: 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65  yte first (big-e
0f20: 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65  ndian).</p>..<ce
0f30: 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73  nter>.<i>Databas
0f40: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
0f50: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
0f60: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
0f70: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
0f80: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
0f90: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
0fa0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fb0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
0fc0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
0fd0: 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c  =center>16<td al
0fe0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65  ign=left>.The he
0ff0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51  ader string: "SQ
1000: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30  Lite format 3\00
1010: 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0".<tr><td valig
1020: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1030: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
1040: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1050: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
1060: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70  >.The database p
1070: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
1080: 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f  s.  Must be a po
1090: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
10a0: 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38  en 512.and 32768
10b0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74   inclusive, or t
10c0: 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65  he value 1 repre
10d0: 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73  senting a page s
10e0: 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74  ize of 65536..<t
10f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1100: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38   align=center>18
1110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1130: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1140: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1150: 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c  ersion.  1 for l
1160: 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41  egacy; 2 for [WA
1170: 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  L]..<tr><td vali
1180: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1190: 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e  ter>19<td valign
11a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11b0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
11c0: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72  t>.File format r
11d0: 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ead version.  1 
11e0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
11f0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
1200: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1210: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
1220: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1230: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1240: 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66  n=left>.Bytes of
1250: 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65   unused "reserve
1260: 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20  d" space at the 
1270: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
1280: 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74  .  Usually 0..<t
1290: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31   align=center>21
12b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78   align=left>.Max
12e0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
12f0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
1300: 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72   Must be 64..<tr
1310: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c  align=center>22<
1330: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1340: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1350: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69  align=left>.Mini
1360: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
1370: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1380: 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e  Must be 32..<tr>
1390: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74  lign=center>23<t
13b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
13d0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20  lign=left>.Leaf 
13e0: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
13f0: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1420: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1430: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1440: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1450: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
1460: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
1470: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1480: 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
1490: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14a0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
14b0: 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61  >.Size of the da
14c0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
14d0: 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68  ages.  The "in-h
14e0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
14f0: 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ize"..<tr><td va
1500: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1510: 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69  enter>32<td vali
1520: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1530: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1540: 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72  eft>.Page number
1550: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
1560: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
1570: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1580: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1590: 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>36<td valign=
15a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
15b0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
15c0: 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  >.Total number o
15d0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
15e0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
15f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1600: 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>40<td valign=t
1610: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1620: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1630: 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .The schema cook
1640: 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ie..<tr><td vali
1650: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1660: 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e  ter>44<td valign
1670: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1680: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1690: 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  t>.The schema fo
16a0: 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75  rmat number.  Su
16b0: 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66  pported schema f
16c0: 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c  ormats are 1, 2,
16d0: 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c   3, and 4..<tr><
16e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64  ign=center>48<td
1700: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1710: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1720: 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c  ign=left>.Defaul
1730: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1740: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1750: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1760: 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>52<td valign=
1770: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1780: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1790: 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  >.The page numbe
17a0: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
17b0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
17c0: 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76  e when in auto-v
17d0: 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65  acuum or.increme
17e0: 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65  ntal-vacuum mode
17f0: 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72  s, or zero other
1800: 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  wise..<tr><td va
1810: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1820: 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69  enter>56<td vali
1830: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1840: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1850: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1860: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1870: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d    A value of 1 m
1880: 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76  eans UTF-8.  A v
1890: 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20  alue of 2.means 
18a0: 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c  UTF-16le.  A val
18b0: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
18c0: 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20  F-16be..<tr><td 
18d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18e0: 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61  =center>60<td va
18f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1900: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1910: 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72  =left>.The "user
1920: 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61   version" as rea
1930: 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65  d and set by the
1940: 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70   [user_version p
1950: 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20  ragma]..<tr><td 
1960: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1970: 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61  =center>64<td va
1980: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1990: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
19a0: 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e  =left>.True (non
19b0: 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65  -zero) for incre
19c0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
19d0: 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f  de.  False (zero
19e0: 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  ) otherwise..<tr
19f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1a00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c  align=center>68<
1a10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1a20: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a40: 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22  "Application ID"
1a50: 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41 20   set by [PRAGMA 
1a60: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 2e  application_id].
1a70: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1a80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1a90: 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >72<td valign=to
1aa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1ab0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
1ac0: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1ad0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1ae0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1af0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b00: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1b10: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1b20: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1b30: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1b40: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1b50: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><td v
1b60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b70: 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61 6c  center>96<td val
1b80: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b90: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1ba0: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1bb0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1bc0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1bd0: 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63  .<h4>1.2.1 Magic
1be0: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1bf0: 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h4>..<p>^Every v
1c00: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1c10: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1c20: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1c30: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1c40: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1c50: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1c60: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1c70: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1c80: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1c90: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1ca0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1cb0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1cc0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1cd0: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1ce0: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1cf0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32  .</p>..<h4>1.2.2
1d00: 20 50 61 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a   Page Size</h4>.
1d10: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1d20: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1d30: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1d40: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1d50: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1d60: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1d70: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1d80: 37 2e 30 2e 31 20 61 6e 64 20 65 61 72 6c 69 65  7.0.1 and earlie
1d90: 72 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  r, this value is
1da0: 20 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   .interpreted as
1db0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e   a big-endian in
1dc0: 74 65 67 65 72 20 61 6e 64 20 6d 75 73 74 20 62  teger and must b
1dd0: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1de0: 20 62 65 74 77 65 65 6e 0a 35 31 32 20 61 6e 64   between.512 and
1df0: 20 33 32 37 36 38 2c 20 69 6e 63 6c 75 73 69 76   32768, inclusiv
1e00: 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69  e.  Beginning wi
1e10: 74 68 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  th SQLite versio
1e20: 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a  n 3.7.1, a page.
1e30: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 20 62 79  size of 65536 by
1e40: 74 65 73 20 69 73 20 73 75 70 70 6f 72 74 65 64  tes is supported
1e50: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 36 35 35  .  The value 655
1e60: 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20  36 will not fit 
1e70: 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e  in a.two-byte in
1e80: 74 65 67 65 72 2c 20 73 6f 20 74 6f 20 73 70 65  teger, so to spe
1e90: 63 69 66 79 20 61 20 36 35 35 33 36 2d 62 79 74  cify a 65536-byt
1ea0: 65 20 70 61 67 65 20 73 69 7a 65 2c 20 74 68 65  e page size, the
1eb0: 20 76 61 6c 75 65 0a 61 74 20 6f 66 66 73 65 74   value.at offset
1ec0: 20 31 36 20 69 73 20 30 78 30 30 20 30 78 30 31   16 is 0x00 0x01
1ed0: 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  ..This value can
1ee0: 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1ef0: 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a  as a big-endian.
1f00: 31 20 61 6e 64 20 74 68 6f 75 67 68 74 20 6f 66  1 and thought of
1f10: 20 69 73 20 61 73 20 61 20 6d 61 67 69 63 20 6e   is as a magic n
1f20: 75 6d 62 65 72 20 74 6f 20 72 65 70 72 65 73 65  umber to represe
1f30: 6e 74 20 74 68 65 20 36 35 35 33 36 20 70 61 67  nt the 65536 pag
1f40: 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e 65 20 63  e size..Or one c
1f50: 61 6e 20 76 69 65 77 20 74 68 65 20 74 77 6f 2d  an view the two-
1f60: 62 79 74 65 20 66 69 65 6c 64 20 61 73 20 61 20  byte field as a 
1f70: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75  little endian nu
1f80: 6d 62 65 72 20 61 6e 64 20 73 61 79 0a 74 68 61  mber and say.tha
1f90: 74 20 69 74 20 72 65 70 72 65 73 65 6e 74 73 20  t it represents 
1fa0: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 64 69  the page size di
1fb0: 76 69 64 65 64 20 62 79 20 32 35 36 2e 20 20 54  vided by 256.  T
1fc0: 68 65 73 65 20 74 77 6f 20 0a 69 6e 74 65 72 70  hese two .interp
1fd0: 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  retations of the
1fe0: 20 70 61 67 65 2d 73 69 7a 65 20 66 69 65 6c 64   page-size field
1ff0: 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e   are equivalent.
2000: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20  </p>..<h4>1.2.3 
2010: 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
2020: 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e  ion numbers</h4>
2030: 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f  ..<p>The file fo
2040: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
2050: 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d  on and file form
2060: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20  at read version 
2070: 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e  at offsets.18 an
2080: 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65  d 19 are intende
2090: 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65  d to allow for e
20a0: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74  nhancements of t
20b0: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69  he file format.i
20c0: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
20d0: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e  s of SQLite.  In
20e0: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
20f0: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74  s of SQLite, bot
2100: 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65  h of.these value
2110: 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c  s are 1 for roll
2120: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67  back journalling
2130: 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72   modes and 2 for
2140: 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69   [WAL].journalli
2150: 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76  ng mode.  If a v
2160: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
2170: 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75   coded to the cu
2180: 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61  rrent.file forma
2190: 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  t specification 
21a0: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74  encounters a dat
21b0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65  abase file where
21c0: 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f   the read.versio
21d0: 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20  n is 1 or 2 but 
21e0: 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f  the write versio
21f0: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  n is greater tha
2200: 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61  n 2, then the da
2210: 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74  tabase.file must
2220: 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72   be treated as r
2230: 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20  ead-only.  If a 
2240: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69  database file wi
2250: 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f  th a read versio
2260: 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32  n.greater than 2
2270: 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
2280: 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61 62   then that datab
2290: 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ase cannot be re
22a0: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f  ad or written.</
22b0: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52 65  p>..<h4>1.2.4 Re
22c0: 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65 72  served bytes per
22d0: 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53   page</h4>..<p>S
22e0: 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61 62  QLite has the ab
22f0: 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73 69  ility to set asi
2300: 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65  de a small numbe
2310: 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65 73  r of extra bytes
2320: 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65   at.the end of e
2330: 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75 73  very page for us
2340: 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e  e by extensions.
2350: 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62 79    These extra by
2360: 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f  tes are.used, fo
2370: 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68  r example, by th
2380: 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74  e SQLite Encrypt
2390: 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f  ion Extension to
23a0: 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61   store a nonce.a
23b0: 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70  nd/or cryptograp
23c0: 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73  hic checksum ass
23d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
23e0: 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22  h page.  ^The ."
23f0: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22 20  reserved space" 
2400: 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79  size in the 1-by
2410: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
2420: 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20 6e  fset 20 is the n
2430: 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f  umber.of bytes o
2440: 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  f space at the e
2450: 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  nd of each page 
2460: 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20 65  to reserve for e
2470: 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20  xtensions..This 
2480: 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79  value is usually
2490: 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63   0.  The value c
24a0: 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a  an be odd.</p>..
24b0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
24c0: 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73   usable_size {us
24d0: 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e  able size}</tcl>
24e0: 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20  .<p>The "usable 
24f0: 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62  size" of a datab
2500: 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65 20  ase page is the 
2510: 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69 66  page size specif
2520: 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20  y by the.2-byte 
2530: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
2540: 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61 64  t 16 in the head
2550: 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65 73  er less the "res
2560: 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69 7a  erved" space siz
2570: 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68  e.recorded in th
2580: 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72  e 1-byte integer
2590: 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e   at offset 20 in
25a0: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
25b0: 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66  e usable.size of
25c0: 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62 65   a page might be
25d0: 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20   an odd number. 
25e0: 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20   ^(However, the 
25f0: 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e  usable size is n
2600: 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ot.allowed to be
2610: 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20   less than 480. 
2620: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2630: 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69 7a   if the page siz
2640: 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74  e is 512,.then t
2650: 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63  he reserved spac
2660: 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78  e size cannot ex
2670: 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a  ceed 32.)^</p>..
2680: 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f 61  <h4>1.2.5 Payloa
2690: 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34 3e  d fractions</h4>
26a0: 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
26b0: 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65 6d  m and minimum em
26c0: 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66  bedded payload f
26d0: 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68 65  ractions and the
26e0: 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66 72   leaf.payload fr
26f0: 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d 75  action values mu
2700: 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61 6e  st be 64, 32, an
2710: 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61 6c  d 32.  These val
2720: 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e 61  ues were.origina
2730: 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  lly intended to 
2740: 62 65 20 74 75 6e 61 62 6c 65 20 70 61 72 61 6d  be tunable param
2750: 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c 64  eters that could
2760: 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64 69   be used to.modi
2770: 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20 66  fy the storage f
2780: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d 74  ormat of the b-t
2790: 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20  ree algorithm.  
27a0: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66 75  However, that.fu
27b0: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 6e  nctionality is n
27c0: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e 64  ot supported and
27d0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63 75   there are no cu
27e0: 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20 61  rrent plans to a
27f0: 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74 68  dd.support in th
2800: 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63 65  e future.  Hence
2810: 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62 79  , these three by
2820: 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61 74  tes are fixed at
2830: 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65 63   the.values spec
2840: 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  ified.</p>..<h4>
2850: 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e 67  1.2.6 File chang
2860: 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a 0a  e counter</h4>..
2870: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2880: 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67 65   chngctr {change
2890: 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a   counter}</tcl>.
28a0: 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68 61  <p>^The file cha
28b0: 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61  nge counter is a
28c0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
28d0: 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
28e0: 20 69 73 0a 69 6e 63 72 65 6d 65 6e 74 65 64 20   is.incremented 
28f0: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
2900: 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 75 6e  abase file is un
2910: 6c 6f 63 6b 65 64 20 61 66 74 65 72 20 68 61 76  locked after hav
2920: 69 6e 67 0a 62 65 65 6e 20 6d 6f 64 69 66 69 65  ing.been modifie
2930: 64 2e 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20 6d  d..When two or m
2940: 6f 72 65 20 70 72 6f 63 65 73 73 65 73 20 61 72  ore processes ar
2950: 65 20 72 65 61 64 69 6e 67 20 74 68 65 20 73 61  e reading the sa
2960: 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  me database file
2970: 2c 20 65 61 63 68 20 0a 70 72 6f 63 65 73 73 20  , each .process 
2980: 63 61 6e 20 64 65 74 65 63 74 20 64 61 74 61 62  can detect datab
2990: 61 73 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ase changes from
29a0: 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73   other processes
29b0: 20 62 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a   by monitoring .
29c0: 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
29d0: 65 72 2e 0a 41 20 70 72 6f 63 65 73 73 20 77 69  er..A process wi
29e0: 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  ll normally want
29f0: 20 74 6f 20 66 6c 75 73 68 20 69 74 73 20 64 61   to flush its da
2a00: 74 61 62 61 73 65 20 70 61 67 65 20 63 61 63 68  tabase page cach
2a10: 65 20 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20 70  e when.another p
2a20: 72 6f 63 65 73 73 20 6d 6f 64 69 66 69 65 64 20  rocess modified 
2a30: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 73 69  the database, si
2a40: 6e 63 65 20 74 68 65 20 63 61 63 68 65 20 68 61  nce the cache ha
2a50: 73 20 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e 0a  s become stale..
2a60: 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20  The file change 
2a70: 63 6f 75 6e 74 65 72 20 66 61 63 69 6c 69 74 61  counter facilita
2a80: 74 65 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c  tes this.</p>..<
2a90: 70 3e 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 63  p>In WAL mode, c
2aa0: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
2ab0: 74 61 62 61 73 65 20 61 72 65 20 64 65 74 65 63  tabase are detec
2ac0: 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 77 61  ted using the wa
2ad0: 6c 2d 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20 74  l-index.and so t
2ae0: 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
2af0: 72 20 69 73 20 6e 6f 74 20 6e 65 65 64 65 64 2e  r is not needed.
2b00: 20 20 48 65 6e 63 65 2c 20 74 68 65 20 63 68 61    Hence, the cha
2b10: 6e 67 65 20 63 6f 75 6e 74 65 72 20 6d 69 67 68  nge counter migh
2b20: 74 0a 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d 65  t.not be increme
2b30: 6e 74 65 64 20 6f 6e 20 65 61 63 68 20 74 72 61  nted on each tra
2b40: 6e 73 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c 20  nsaction in WAL 
2b50: 6d 6f 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31  mode.</p>..<h4>1
2b60: 2e 32 2e 37 20 49 6e 2d 68 65 61 64 65 72 20 64  .2.7 In-header d
2b70: 61 74 61 62 61 73 65 20 73 69 7a 65 3c 2f 68 34  atabase size</h4
2b80: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
2b90: 65 6e 74 20 66 69 6c 65 73 69 7a 65 20 7b 69 6e  ent filesize {in
2ba0: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2bb0: 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e   size}</tcl>.<p>
2bc0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
2bd0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
2be0: 74 20 6f 66 66 73 65 74 20 32 38 20 69 6e 74 6f  t offset 28 into
2bf0: 20 74 68 65 20 68 65 61 64 65 72 20 0a 73 74 6f   the header .sto
2c00: 72 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20  res the size of 
2c10: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2c20: 65 20 69 6e 20 70 61 67 65 73 2e 20 20 5e 49 66  e in pages.  ^If
2c30: 20 74 68 69 73 20 69 6e 2d 68 65 61 64 65 72 0a   this in-header.
2c40: 64 61 74 61 73 69 7a 65 20 73 69 7a 65 20 69 73  datasize size is
2c50: 20 6e 6f 74 20 76 61 6c 69 64 20 28 73 65 65 20   not valid (see 
2c60: 74 68 65 20 6e 65 78 74 20 70 61 72 61 67 72 61  the next paragra
2c70: 70 68 29 2c 20 74 68 65 6e 20 74 68 65 20 64 61  ph), then the da
2c80: 74 61 62 61 73 65 20 0a 73 69 7a 65 20 69 73 20  tabase .size is 
2c90: 63 6f 6d 70 75 74 65 64 20 62 79 20 6c 6f 6f 6b  computed by look
2ca0: 69 6e 67 0a 61 74 20 74 68 65 20 61 63 74 75 61  ing.at the actua
2cb0: 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  l size of the da
2cc0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 4f 6c 64  tabase file. Old
2cd0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
2ce0: 51 4c 69 74 65 0a 69 67 6e 6f 72 65 64 20 74 68  QLite.ignored th
2cf0: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2d00: 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20 75 73  base size and us
2d10: 65 64 20 74 68 65 20 61 63 74 75 61 6c 20 66 69  ed the actual fi
2d20: 6c 65 20 73 69 7a 65 0a 65 78 63 6c 75 73 69 76  le size.exclusiv
2d30: 65 6c 79 2e 20 20 5e 4e 65 77 65 72 20 76 65 72  ely.  ^Newer ver
2d40: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
2d50: 75 73 65 20 74 68 65 20 69 6e 2d 68 65 61 64 65  use the in-heade
2d60: 72 20 64 61 74 61 62 61 73 65 0a 73 69 7a 65 20  r database.size 
2d70: 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  if it is availab
2d80: 6c 65 20 62 75 74 20 66 61 6c 6c 20 62 61 63 6b  le but fall back
2d90: 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66   to the actual f
2da0: 69 6c 65 20 73 69 7a 65 20 69 66 0a 74 68 65 20  ile size if.the 
2db0: 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61  in-header databa
2dc0: 73 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 20 76  se size is not v
2dd0: 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54  alid.</p>..<p>^T
2de0: 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74  he in-header dat
2df0: 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 6f 6e  abase size is on
2e00: 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  ly considered to
2e10: 20 62 65 20 76 61 6c 69 64 20 69 66 0a 69 74 20   be valid if.it 
2e20: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20  is non-zero and 
2e30: 69 66 20 74 68 65 20 34 2d 62 79 74 65 20 5b 63  if the 4-byte [c
2e40: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20 61  hange counter] a
2e50: 74 20 6f 66 66 73 65 74 20 32 34 0a 65 78 61 63  t offset 24.exac
2e60: 74 6c 79 20 6d 61 74 63 68 65 73 20 74 68 65 20  tly matches the 
2e70: 34 2d 62 79 74 65 20 5b 76 65 72 73 69 6f 6e 2d  4-byte [version-
2e80: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
2e90: 5d 20 61 74 20 6f 66 66 73 65 74 20 39 32 2e 0a  ] at offset 92..
2ea0: 5e 28 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20  ^(The in-header 
2eb0: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 69 73  database size is
2ec0: 20 61 6c 77 61 79 73 20 76 61 6c 69 64 20 0a 77   always valid .w
2ed0: 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
2ee0: 20 69 73 20 6f 6e 6c 79 20 6d 6f 64 69 66 69 65   is only modifie
2ef0: 64 20 75 73 69 6e 67 20 72 65 63 65 6e 74 20 76  d using recent v
2f00: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2f10: 65 0a 28 76 65 72 73 69 6f 6e 73 20 33 2e 37 2e  e.(versions 3.7.
2f20: 30 20 61 6e 64 20 6c 61 74 65 72 29 2e 29 5e 0a  0 and later).)^.
2f30: 49 66 20 61 20 6c 65 67 61 63 79 20 76 65 72 73  If a legacy vers
2f40: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 77 72  ion of SQLite wr
2f50: 69 74 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  ites to the data
2f60: 62 61 73 65 2c 20 69 74 20 77 69 6c 6c 20 6e 6f  base, it will no
2f70: 74 0a 6b 6e 6f 77 20 74 6f 20 75 70 64 61 74 65  t.know to update
2f80: 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64   the in-header d
2f90: 61 74 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64  atabase size and
2fa0: 20 73 6f 20 74 68 65 20 69 6e 2d 68 65 61 64 65   so the in-heade
2fb0: 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a 65 20  r.database size 
2fc0: 63 6f 75 6c 64 20 62 65 20 69 6e 63 6f 72 72 65  could be incorre
2fd0: 63 74 2e 20 20 42 75 74 20 6c 65 67 61 63 79 20  ct.  But legacy 
2fe0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
2ff0: 74 65 0a 77 69 6c 6c 20 61 6c 73 6f 20 6c 65 61  te.will also lea
3000: 76 65 20 74 68 65 20 76 65 72 73 69 6f 6e 2d 76  ve the version-v
3010: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 20  alid-for number 
3020: 61 74 20 6f 66 66 73 65 74 20 39 32 20 75 6e 63  at offset 92 unc
3030: 68 61 6e 67 65 64 0a 73 6f 20 69 74 20 77 69 6c  hanged.so it wil
3040: 6c 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20  l not match the 
3050: 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 2e 20  change-counter. 
3060: 20 48 65 6e 63 65 2c 20 69 6e 76 61 6c 69 64 20   Hence, invalid 
3070: 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 62 61  in-header.databa
3080: 73 65 20 73 69 7a 65 73 20 63 61 6e 20 62 65 20  se sizes can be 
3090: 64 65 74 65 63 74 65 64 20 28 61 6e 64 20 69 67  detected (and ig
30a0: 6e 6f 72 65 64 29 20 62 79 20 6f 62 73 65 72 76  nored) by observ
30b0: 69 6e 67 20 77 68 65 6e 0a 74 68 65 20 63 68 61  ing when.the cha
30c0: 6e 67 65 2d 63 6f 75 6e 74 65 72 20 64 6f 65 73  nge-counter does
30d0: 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20 76   not match the v
30e0: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
30f0: 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68   number.</p>..<h
3100: 34 3e 31 2e 32 2e 38 20 46 72 65 65 20 70 61 67  4>1.2.8 Free pag
3110: 65 20 6c 69 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e  e list</h4>..<p>
3120: 55 6e 75 73 65 64 20 70 61 67 65 73 20 69 6e 20  Unused pages in 
3130: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3140: 65 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20  e are stored on 
3150: 61 20 66 72 65 65 6c 69 73 74 2e 20 20 5e 54 68  a freelist.  ^Th
3160: 65 0a 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  e.4-byte big-end
3170: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
3180: 66 66 73 65 74 20 33 32 20 73 74 6f 72 65 73 20  ffset 32 stores 
3190: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
31a0: 6f 66 0a 74 68 65 20 66 69 72 73 74 20 70 61 67  of.the first pag
31b0: 65 20 6f 66 20 74 68 65 20 66 72 65 65 6c 69 73  e of the freelis
31c0: 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68  t, or zero if th
31d0: 65 20 66 72 65 65 6c 69 73 74 20 69 73 20 65 6d  e freelist is em
31e0: 70 74 79 2e 0a 5e 54 68 65 20 34 2d 62 79 74 65  pty..^The 4-byte
31f0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
3200: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 33 36  ger at offset 36
3210: 20 73 74 6f 72 65 73 20 73 74 6f 72 65 73 20 74   stores stores t
3220: 68 65 20 74 6f 74 61 6c 20 0a 6e 75 6d 62 65 72  he total .number
3230: 20 6f 66 20 70 61 67 65 73 20 6f 6e 20 74 68 65   of pages on the
3240: 20 66 72 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a   freelist.</p>..
3250: 3c 68 34 3e 31 2e 32 2e 39 20 53 63 68 65 6d 61  <h4>1.2.9 Schema
3260: 20 63 6f 6f 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70   cookie</h4>..<p
3270: 3e 5e 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  >^The schema coo
3280: 6b 69 65 20 69 73 20 61 20 34 2d 62 79 74 65 20  kie is a 4-byte 
3290: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
32a0: 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 30 0a  er at offset 40.
32b0: 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  that is incremen
32c0: 74 65 64 20 77 68 65 6e 65 76 65 72 20 74 68 65  ted whenever the
32d0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
32e0: 20 63 68 61 6e 67 65 73 2e 20 20 41 20 0a 70 72   changes.  A .pr
32f0: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
3300: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 61 67 61   is compiled aga
3310: 69 6e 73 74 20 61 20 73 70 65 63 69 66 69 63 20  inst a specific 
3320: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a 64  version of the.d
3330: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
3340: 20 5e 57 68 65 6e 65 76 65 72 20 74 68 65 20 64   ^Whenever the d
3350: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
3360: 68 61 6e 67 65 73 2c 20 74 68 65 20 73 74 61 74  hanges, the stat
3370: 65 6d 65 6e 74 0a 6d 75 73 74 20 62 65 20 72 65  ement.must be re
3380: 70 72 65 70 61 72 65 64 2e 20 20 5e 57 68 65 6e  prepared.  ^When
3390: 65 76 65 72 20 61 20 70 72 65 70 61 72 65 64 20  ever a prepared 
33a0: 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20  statement runs, 
33b0: 69 74 20 66 69 72 73 74 20 63 68 65 63 6b 73 0a  it first checks.
33c0: 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
33d0: 65 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  e to make sure t
33e0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  he value is the 
33f0: 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65  same as when the
3400: 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70   statement.was p
3410: 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20 74  repared and if t
3420: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
3430: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68   has changed, th
3440: 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72  e statement abor
3450: 74 73 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20 66  ts.in order to f
3460: 6f 72 63 65 20 74 68 65 20 73 74 61 74 65 6d 65  orce the stateme
3470: 6e 74 20 74 6f 20 62 65 20 72 65 70 72 65 70 61  nt to be reprepa
3480: 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  red.</p>..<tcl>h
3490: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65  d_fragment {sche
34a0: 6d 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d  maformat} {schem
34b0: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d  a format number}
34c0: 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31  </tcl>.<h4>1.2.1
34d0: 30 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  0 Schema format 
34e0: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
34f0: 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  The schema forma
3500: 74 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34 2d  t number is a 4-
3510: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3520: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3530: 74 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d 61  t 44..The schema
3540: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69   format number i
3550: 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65  s similar to the
3560: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65 61   file format rea
3570: 64 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72 73  d and write.vers
3580: 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20 6f  ion numbers at o
3590: 66 66 73 65 74 73 20 31 38 20 61 6e 64 20 31 39  ffsets 18 and 19
35a0: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
35b0: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   schema format n
35c0: 75 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f 20  umber.refers to 
35d0: 74 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20 53  the high-level S
35e0: 51 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72 61  QL formatting ra
35f0: 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 6f  ther than the lo
3600: 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a 66  w-level b-tree.f
3610: 6f 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75 72  ormatting.  Four
3620: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   schema format n
3630: 75 6d 62 65 72 73 20 61 72 65 20 63 75 72 72 65  umbers are curre
3640: 6e 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f 70  ntly defined:</p
3650: 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75  >..<ol>.<li valu
3660: 65 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73 20  e=1>Format 1 is 
3670: 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61 6c  understood by al
3680: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  l versions of SQ
3690: 4c 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65 72  Lite back to.ver
36a0: 73 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e  sion 3.0.0.</li>
36b0: 0a 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f 72  .<li value=2>For
36c0: 6d 61 74 20 32 20 61 64 64 73 20 74 68 65 20 61  mat 2 adds the a
36d0: 62 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20 77  bility of rows w
36e0: 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74  ithin the same t
36f0: 61 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20 76  able.to have a v
3700: 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f 66  arying number of
3710: 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72 64   columns, in ord
3720: 65 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68  er to support th
3730: 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c  e.[ALTER TABLE |
3740: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e   ALTER TABLE ...
3750: 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e   ADD COLUMN] fun
3760: 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75 70  ctionality.  Sup
3770: 70 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e 67  port for.reading
3780: 20 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f 72   and writing for
3790: 6d 61 74 20 32 20 77 61 73 20 61 64 64 65 64 20  mat 2 was added 
37a0: 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  in SQLite versio
37b0: 6e 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30 35  n 3.1.3 .on 2005
37c0: 2d 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69  -02-19.</li>.<li
37d0: 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74 20   value=3>Format 
37e0: 33 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69  3 adds the abili
37f0: 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c 75  ty of extra colu
3800: 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41 4c  mns added by.[AL
3810: 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45  TER TABLE | ALTE
3820: 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20  R TABLE ... ADD 
3830: 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65 20  COLUMN] to have 
3840: 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74  non-NULL default
3850: 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20 63  .values.  This c
3860: 61 70 61 62 69 6c 69 74 79 20 77 61 73 20 61 64  apability was ad
3870: 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65  ded in SQLite ve
3880: 72 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e 20  rsion 3.1.4 .on 
3890: 32 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69 3e  2005-03-11.</li>
38a0: 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46 6f  .<li value=4>^Fo
38b0: 72 6d 61 74 20 34 20 63 61 75 73 65 73 20 53 51  rmat 4 causes SQ
38c0: 4c 69 74 65 20 74 6f 20 72 65 73 70 65 63 74 20  Lite to respect 
38d0: 74 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e 67 20  the.[descending 
38e0: 69 6e 64 65 78 65 73 20 7c 20 44 45 53 43 20 6b  indexes | DESC k
38f0: 65 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65 78  eyword] on.index
3900: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20   declarations.  
3910: 28 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77 6f  (^The DESC keywo
3920: 72 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e  rd is ignored in
3930: 20 69 6e 64 65 78 65 73 20 66 6f 72 20 0a 66 6f   indexes for .fo
3940: 72 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64 20  rmats 1, 2, and 
3950: 33 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61 6c  3.).^Format 4 al
3960: 73 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77 20  so adds two new 
3970: 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20 74  boolean record t
3980: 79 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65 72  ype values ([ser
3990: 69 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e 64  ial types].8 and
39a0: 20 39 2e 29 20 20 53 75 70 70 6f 72 74 20 66 6f   9.)  Support fo
39b0: 72 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20 61  r format 4 was a
39c0: 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 33  dded in SQLite 3
39d0: 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d  .3.0 on.2006-01-
39e0: 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a  10.</li>.</ol>..
39f0: 3c 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73 65  <p>^New database
3a00: 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62   files created b
3a10: 79 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f 72  y SQLite use for
3a20: 6d 61 74 20 34 20 62 79 20 64 65 66 61 75 6c 74  mat 4 by default
3a30: 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66  ..^The [legacy_f
3a40: 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d  ile_format pragm
3a50: 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  a] can be used t
3a60: 6f 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a 74  o cause SQLite.t
3a70: 6f 20 63 72 65 61 74 65 20 6e 65 77 20 64 61 74  o create new dat
3a80: 61 62 61 73 65 20 66 69 6c 65 73 20 75 73 69 6e  abase files usin
3a90: 67 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68 65 20  g format 1..The 
3aa0: 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e  format version n
3ab0: 75 6d 62 65 72 20 63 61 6e 20 62 65 20 6d 61 64  umber can be mad
3ac0: 65 20 74 6f 20 64 65 66 61 75 6c 74 20 74 6f 20  e to default to 
3ad0: 31 20 69 6e 73 74 65 61 64 20 6f 66 20 34 20 62  1 instead of 4 b
3ae0: 79 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c 49 54  y.setting [SQLIT
3af0: 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
3b00: 4f 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f 6d 70  ORMAT]=1 at comp
3b10: 69 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a  ile-time..</p>..
3b20: 3c 68 34 3e 31 2e 32 2e 31 31 20 53 75 67 67 65  <h4>1.2.11 Sugge
3b30: 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 3c  sted cache size<
3b40: 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62  /h4>..<p>The 4-b
3b50: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73  yte big-endian s
3b60: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74  igned integer at
3b70: 20 6f 66 66 73 65 74 20 34 38 20 69 73 20 74 68   offset 48 is th
3b80: 65 20 73 75 67 67 65 73 74 65 64 0a 63 61 63 68  e suggested.cach
3b90: 65 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73 20  e size in pages 
3ba0: 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
3bb0: 20 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c 75   file.  The valu
3bc0: 65 20 69 73 20 61 20 73 75 67 67 65 73 74 69 6f  e is a suggestio
3bd0: 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74  n.only and SQLit
3be0: 65 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62  e is under no ob
3bf0: 6c 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f  ligation to hono
3c00: 72 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f 6c  r it.  The absol
3c10: 75 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68 65  ute value.of the
3c20: 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 65 64   integer is used
3c30: 20 61 73 20 74 68 65 20 73 75 67 67 65 73 74 65   as the suggeste
3c40: 64 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75 67  d size.  The sug
3c50: 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a  gested cache siz
3c60: 65 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73 69  e.can be set usi
3c70: 6e 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74 5f  ng the [default_
3c80: 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d  cache_size pragm
3c90: 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  a].</p>..<h4>1.2
3ca0: 2e 31 32 20 49 6e 63 72 65 6d 65 6e 74 61 6c 20  .12 Incremental 
3cb0: 76 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73 3c  vacuum settings<
3cc0: 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f  /h4>..<p>The two
3cd0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
3ce0: 61 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20 6f  an integers at o
3cf0: 66 66 73 65 74 73 20 35 32 20 61 6e 64 20 36 34  ffsets 52 and 64
3d00: 20 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61 6e   are used.to man
3d10: 61 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76 61  age the [auto_va
3d20: 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65  cuum] and [incre
3d30: 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d  mental_vacuum] m
3d40: 6f 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20 69  odes.  ^If.the i
3d50: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3d60: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
3d70: 20 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70 74   pointer-map (pt
3d80: 72 6d 61 70 29 20 70 61 67 65 73 20 61 72 65 0a  rmap) pages are.
3d90: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
3da0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
3db0: 6e 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f 5f  nd neither auto_
3dc0: 76 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72 65  vacuum nor.incre
3dd0: 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 72  mental_vacuum ar
3de0: 65 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e 49  e supported.  ^I
3df0: 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74  f the integer at
3e00: 20 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e 6f   offset 52 is.no
3e10: 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20 69  n-zero then it i
3e20: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
3e30: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
3e40: 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68   root page in th
3e50: 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c  e.database file,
3e60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3e70: 6c 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  le will contain 
3e80: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e  ptrmap pages, an
3e90: 64 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20  d the.mode must 
3ea0: 62 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76  be either auto_v
3eb0: 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65  acuum or increme
3ec0: 6e 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49  ntal_vacuum.  ^I
3ed0: 6e 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61  n this latter.ca
3ee0: 73 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20  se, the integer 
3ef0: 61 74 20 6f 66 66 73 65 74 20 36 34 20 69 73 20  at offset 64 is 
3f00: 74 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65  true for increme
3f10: 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a  ntal_vacuum and.
3f20: 66 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76  false for auto_v
3f30: 61 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65 20  acuum.  ^If the 
3f40: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3f50: 74 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65  t 52 is zero the
3f60: 6e 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61 74  n.the integer at
3f70: 20 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74 20   offset 64 must 
3f80: 61 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70  also be zero.</p
3f90: 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 33 20 54 65  >..<h4>1.2.13 Te
3fa0: 78 74 20 65 6e 63 6f 64 69 6e 67 3c 2f 68 34 3e  xt encoding</h4>
3fb0: 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65  ..<p>^The 4-byte
3fc0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
3fd0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 36  ger at offset 56
3fe0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
3ff0: 65 6e 63 6f 64 69 6e 67 0a 75 73 65 64 20 66 6f  encoding.used fo
4000: 72 20 61 6c 6c 20 74 65 78 74 20 73 74 72 69 6e  r all text strin
4010: 67 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  gs stored in the
4020: 20 64 61 74 61 62 61 73 65 2e 20 20 5e 41 20 76   database.  ^A v
4030: 61 6c 75 65 20 6f 66 20 31 20 6d 65 61 6e 73 0a  alue of 1 means.
4040: 55 54 46 2d 38 2e 20 20 5e 41 20 76 61 6c 75 65  UTF-8.  ^A value
4050: 20 6f 66 20 32 20 6d 65 61 6e 73 20 55 54 46 2d   of 2 means UTF-
4060: 31 36 6c 65 2e 20 20 5e 41 20 76 61 6c 75 65 20  16le.  ^A value 
4070: 6f 66 20 33 20 6d 65 61 6e 73 20 55 54 46 2d 31  of 3 means UTF-1
4080: 36 62 65 2e 0a 4e 6f 20 6f 74 68 65 72 20 76 61  6be..No other va
4090: 6c 75 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  lues are allowed
40a0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31  .</p>..<h4>1.2.1
40b0: 34 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20 6e  4 User version n
40c0: 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e  umber</h4>..<p>^
40d0: 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65  The 4-byte big-e
40e0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
40f0: 20 6f 66 66 73 65 74 20 36 30 20 69 73 20 74 68   offset 60 is th
4100: 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20 77  e user version w
4110: 68 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64 20  hich.is set and 
4120: 71 75 65 72 69 65 64 20 62 79 20 74 68 65 20 5b  queried by the [
4130: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72 61  user_version pra
4140: 67 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72 20  gma].  The user 
4150: 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20 75  version is.not u
4160: 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f  sed by SQLite.</
4170: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
4180: 6d 65 6e 74 20 61 70 70 69 64 20 7b 41 70 70 6c  ment appid {Appl
4190: 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63 6c  ication ID}</tcl
41a0: 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20 41 70 70  >.<h4>1.2.15 App
41b0: 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 34 3e  lication ID</h4>
41c0: 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65  ..<p>^The 4-byte
41d0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
41e0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36 38  ger at offset 68
41f0: 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61 74   is an "Applicat
4200: 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61 6e  ion ID" that.can
4210: 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20 5b   be set by the [
4220: 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74 69  PRAGMA applicati
4230: 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20 69  on_id] command i
4240: 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e 74  n order to ident
4250: 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73 65  ify the.database
4260: 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f   as belonging to
4270: 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20 77   or associated w
4280: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
4290: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54 68   application..Th
42a0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49 44  e application ID
42b0: 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
42c0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
42d0: 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70 6c  used as an.[appl
42e0: 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f 72  ication file-for
42f0: 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c 69  mat].  The appli
4300: 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62 65  cation ID can be
4310: 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74 69   used by utiliti
4320: 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74 74  es .such as [htt
4330: 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73 79  p://www.darwinsy
4340: 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66 69  s.com/file/ | fi
4350: 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65 72 6d  le(1)] to determ
4360: 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69 63  ine the specific
4370: 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74 68 65  .file type rathe
4380: 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65 70 6f  r than just repo
4390: 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33 20 44  rting "SQLite3 D
43a0: 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c 69 73  atabase".  A lis
43b0: 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20 61 70  t of.assigned ap
43c0: 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63 61  plication IDs ca
43d0: 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f 6e  n be seen by con
43e0: 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74 74  sulting the.[htt
43f0: 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f  p://www.sqlite.o
4400: 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74 3f  rg/src/artifact?
4410: 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61 6d  ci=trunk&filenam
4420: 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67 69  e=magic.txt|magi
4430: 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20 74  c.txt].file in t
4440: 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  he SQLite source
4450: 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70 3e   repository.</p>
4460: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
4470: 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65 72  nt validfor {ver
4480: 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e  sion-valid-for n
4490: 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 34  umber}</tcl>.<h4
44a0: 3e 31 2e 32 2e 31 36 20 57 72 69 74 65 20 6c 69  >1.2.16 Write li
44b0: 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e 75  brary version nu
44c0: 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f 6e  mber and version
44d0: 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65  -valid-for numbe
44e0: 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r</h4>..<p>^The 
44f0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
4500: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
4510: 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74 68  set 96 stores th
4520: 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49  e .[SQLITE_VERSI
4530: 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75 65  ON_NUMBER] value
4540: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
4550: 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f 73  library that mos
4560: 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69 66  t.recently modif
4570: 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ied the database
4580: 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d 62   file.  ^The 4-b
4590: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
45a0: 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74  nteger at.offset
45b0: 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75 65   92 is the value
45c0: 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65 20   of the [change 
45d0: 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74 68  counter] when th
45e0: 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
45f0: 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54 68  .was stored.  Th
4600: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
4610: 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65 73  set 92 indicates
4620: 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74 69   which transacti
4630: 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20 6e  on.the version n
4640: 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20 66  umber is valid f
4650: 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74 69  or and is someti
4660: 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a 22  mes called the."
4670: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
4680: 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34 3e  r number"...<h4>
4690: 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73 70  1.2.16 Header sp
46a0: 61 63 65 20 72 65 73 65 72 76 65 64 20 66 6f 72  ace reserved for
46b0: 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e 0a   expansion</h4>.
46c0: 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62 79  .<p>All other by
46d0: 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  tes of the datab
46e0: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
46f0: 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f 72  are reserved for
4700: 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73 69 6f  .future expansio
4710: 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73 65  n and must be se
4720: 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a  t to zero.</p>..
4730: 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63 6b  <h3>1.3 The Lock
4740: 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e 0a  -Byte Page</h3>.
4750: 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74  .<p>The lock-byt
4760: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73 69  e page is the si
4770: 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65  ngle page of the
4780: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 74   database file.t
4790: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
47a0: 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65 74   bytes at offset
47b0: 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37 34  s between 107374
47c0: 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34 32  1824 and 1073742
47d0: 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e 20  335,.inclusive. 
47e0: 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   A database file
47f0: 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74 68   that is less th
4800: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 31  an or equal to 1
4810: 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73 20  073741824 bytes 
4820: 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69 6e  .in size contain
4830: 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20 70  s no lock-byte p
4840: 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73 65  age.  A database
4850: 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61   file larger tha
4860: 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f 6e  n.1073741824 con
4870: 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e  tains exactly on
4880: 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65  e lock-byte page
4890: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c  ..</p>..<p>The l
48a0: 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73  ock-byte page is
48b0: 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20 75   set aside for u
48c0: 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61 74  se by the operat
48d0: 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69  ing-system speci
48e0: 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d  fic.[VFS] implem
48f0: 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70 6c  entation in impl
4900: 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61 74  ementing the dat
4910: 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b 69  abase file locki
4920: 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a 5e  ng primitives..^
4930: 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20  SQLite does not 
4940: 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74  use the lock-byt
4950: 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53 51  e page.  ^The SQ
4960: 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c 20  Lite core .will 
4970: 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77 72  never read or wr
4980: 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74  ite the lock-byt
4990: 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20 6f  e page,.though o
49a0: 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20  perating-system 
49b0: 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20 0a  specific [VFS] .
49c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
49d0: 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72 65  may choose to re
49e0: 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74 65  ad or write byte
49f0: 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62 79  s on the lock-by
4a00: 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64 69  te .page accordi
4a10: 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73  ng to the .needs
4a20: 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69 65   and proclivitie
4a30: 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79  s of the underly
4a40: 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65  ing system.  The
4a50: 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a   unix and win32.
4a60: 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61  [VFS] implementa
4a70: 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65 20  tions that come 
4a80: 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74  built into SQLit
4a90: 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 74  e do not write t
4aa0: 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20  o the.lock-byte 
4ab0: 70 61 67 65 2c 20 62 75 74 20 74 68 69 72 64 2d  page, but third-
4ac0: 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65 6d  party VFS implem
4ad0: 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74  entations for.ot
4ae0: 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79  her operating sy
4af0: 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70 3e  stems might.</p>
4b00: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
4b10: 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66  nt {freelist} {f
4b20: 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70  reelist} {free-p
4b30: 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a  age list}</tcl>.
4b40: 3c 68 33 3e 31 2e 34 20 54 68 65 20 46 72 65 65  <h3>1.4 The Free
4b50: 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20  list</h3>..<p>A 
4b60: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69  database file mi
4b70: 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65 20  ght contain one 
4b80: 6f 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74 68  or more pages th
4b90: 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61 63  at are not in.ac
4ba0: 74 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73 65  tive use.  Unuse
4bb0: 64 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d 65  d pages can come
4bc0: 20 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61 6d   about, for exam
4bd0: 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72 6d  ple, when inform
4be0: 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65 64  ation.is deleted
4bf0: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
4c00: 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65  se.  Unused page
4c10: 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20  s are stored on 
4c20: 74 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e 64  the freelist.and
4c30: 20 61 72 65 20 72 65 75 73 65 64 20 77 68 65 6e   are reused when
4c40: 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67 65   additional page
4c50: 73 20 61 72 65 20 72 65 71 75 69 72 65 64 2e 3c  s are required.<
4c60: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65 65  /p>..<p>The free
4c70: 6c 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a 65  list is organize
4c80: 64 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d as a linked li
4c90: 73 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20 74  st of freelist t
4ca0: 72 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68 20  runk pages.with 
4cb0: 65 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65 73  each trunk pages
4cc0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67 65   containing page
4cd0: 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65 72   numbers for zer
4ce0: 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c 69  o or more freeli
4cf0: 73 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f  st.leaf pages.</
4d00: 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69 73  p>..<p>A freelis
4d10: 74 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f 6e  t trunk page con
4d20: 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61  sists of an arra
4d30: 79 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67 2d  y of 4-byte big-
4d40: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 2e  endian integers.
4d50: 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65  .The size of the
4d60: 20 61 72 72 61 79 20 69 73 20 61 73 20 6d 61 6e   array is as man
4d70: 79 20 69 6e 74 65 67 65 72 73 20 61 73 20 77 69  y integers as wi
4d80: 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75 73  ll fit in the us
4d90: 61 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61 20  able space.of a 
4da0: 70 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69 6d  page.  The minim
4db0: 75 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65 20  um usable space 
4dc0: 69 73 20 34 38 30 20 62 79 74 65 73 20 73 6f 20  is 480 bytes so 
4dd0: 74 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20 61  the array will a
4de0: 6c 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61 73  lways.be at leas
4df0: 74 20 31 32 30 20 65 6e 74 72 69 65 73 20 69 6e  t 120 entries in
4e00: 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20 66   length.  ^The f
4e10: 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20  irst integer in 
4e20: 74 68 65 20 61 72 72 61 79 20 0a 69 73 20 74 68  the array .is th
4e30: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
4e40: 20 74 68 65 20 6e 65 78 74 20 66 72 65 65 6c 69   the next freeli
4e50: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 69 6e  st trunk page in
4e60: 20 74 68 65 20 6c 69 73 74 20 6f 72 20 7a 65 72   the list or zer
4e70: 6f 20 0a 69 66 20 74 68 69 73 20 69 73 20 74 68  o .if this is th
4e80: 65 20 6c 61 73 74 20 66 72 65 65 6c 69 73 74 20  e last freelist 
4e90: 74 72 75 6e 6b 20 70 61 67 65 2e 20 20 5e 54 68  trunk page.  ^Th
4ea0: 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72  e second integer
4eb0: 20 69 6e 20 74 68 65 20 61 72 72 61 79 0a 69 73   in the array.is
4ec0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c   the number of l
4ed0: 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74 65 72  eaf page pointer
4ee0: 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 43 61  s to follow.  Ca
4ef0: 6c 6c 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e  ll the second in
4f00: 74 65 67 65 72 20 4c 2e 0a 5e 49 66 20 4c 20 69  teger L..^If L i
4f10: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
4f20: 65 72 6f 20 74 68 65 6e 20 69 6e 74 65 67 65 72  ero then integer
4f30: 73 20 77 69 74 68 20 61 72 72 61 79 20 69 6e 64  s with array ind
4f40: 65 78 65 73 20 62 65 74 77 65 65 6e 20 32 20 61  exes between 2 a
4f50: 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73 69 76 65  nd.L+1 inclusive
4f60: 20 63 6f 6e 74 61 69 6e 20 70 61 67 65 20 6e 75   contain page nu
4f70: 6d 62 65 72 73 20 66 6f 72 20 66 72 65 65 6c 69  mbers for freeli
4f80: 73 74 20 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f  st leaf pages.</
4f90: 70 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20  p>..<p>Freelist 
4fa0: 6c 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61  leaf pages conta
4fb0: 69 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f  in no informatio
4fc0: 6e 2e 20 20 5e 53 51 4c 69 74 65 20 61 76 6f 69  n.  ^SQLite avoi
4fd0: 64 73 20 72 65 61 64 69 6e 67 20 6f 72 0a 77 72  ds reading or.wr
4fe0: 69 74 69 6e 67 20 66 72 65 65 6c 69 73 74 20 6c  iting freelist l
4ff0: 65 61 66 20 70 61 67 65 73 20 69 6e 20 6f 72 64  eaf pages in ord
5000: 65 72 20 74 6f 20 72 65 64 75 63 65 20 64 69 73  er to reduce dis
5010: 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41  k I/O.</p>..<p>A
5020: 20 62 75 67 20 69 6e 20 53 51 4c 69 74 65 20 76   bug in SQLite v
5030: 65 72 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f  ersions prior to
5040: 20 33 2e 36 2e 30 20 63 61 75 73 65 64 20 74 68   3.6.0 caused th
5050: 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 62 65  e database to be
5060: 0a 72 65 70 6f 72 74 65 64 20 61 73 20 63 6f 72  .reported as cor
5070: 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74  rupt if any of t
5080: 68 65 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65  he last 6 entrie
5090: 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73  s in the freelis
50a0: 74 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72  t trunk page .ar
50b0: 72 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f  ray contained no
50c0: 6e 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20  n-zero values.  
50d0: 4e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  Newer versions o
50e0: 66 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20  f SQLite do not 
50f0: 68 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65  have.this proble
5100: 6d 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65  m.  ^However, ne
5110: 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  wer versions of 
5120: 53 51 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f  SQLite still avo
5130: 69 64 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61  id using the .la
5140: 73 74 20 73 69 78 20 65 6e 74 72 69 65 73 20 69  st six entries i
5150: 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74  n the freelist t
5160: 72 75 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20  runk page array 
5170: 69 6e 20 6f 72 64 65 72 20 74 68 61 74 20 64 61  in order that da
5180: 74 61 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65  tabase.files cre
5190: 61 74 65 64 20 62 79 20 6e 65 77 65 72 20 76 65  ated by newer ve
51a0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
51b0: 20 63 61 6e 20 62 65 20 72 65 61 64 20 62 79 20   can be read by 
51c0: 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f  older versions.o
51d0: 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c  f SQLite.</p>..<
51e0: 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  p>^The number of
51f0: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73 20   freelist pages 
5200: 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 34  is stored as a 4
5210: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
5220: 20 69 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20   integer.in the 
5230: 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20  database header 
5240: 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20  at an offset of 
5250: 33 36 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  36 from the begi
5260: 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c  nning of the fil
5270: 65 2e 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65  e..^The database
5280: 20 68 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f   header also sto
5290: 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d  res the page num
52a0: 62 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74  ber of the first
52b0: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a   freelist trunk.
52c0: 70 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65  page as a 4-byte
52d0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
52e0: 67 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74  ger at an offset
52f0: 20 6f 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20   of 32 from the 
5300: 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65  beginning.of the
5310: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   file.</p>..<tcl
5320: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 74 72  >hd_fragment btr
5330: 65 65 20 7b 42 2a 2d 54 72 65 65 73 7d 3c 2f 74  ee {B*-Trees}</t
5340: 63 6c 3e 0a 3c 68 33 3e 31 2e 35 20 42 2d 74 72  cl>.<h3>1.5 B-tr
5350: 65 65 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c  ee Pages</h3>..<
5360: 70 3e 54 68 65 20 62 2d 74 72 65 65 20 61 6c 67  p>The b-tree alg
5370: 6f 72 69 74 68 6d 20 70 72 6f 76 69 64 65 73 20  orithm provides 
5380: 6b 65 79 2f 64 61 74 61 20 73 74 6f 72 61 67 65  key/data storage
5390: 20 77 69 74 68 20 75 6e 69 71 75 65 20 61 6e 64   with unique and
53a0: 0a 6f 72 64 65 72 65 64 20 6b 65 79 73 20 6f 6e  .ordered keys on
53b0: 20 70 61 67 65 2d 6f 72 69 65 6e 74 65 64 20 73   page-oriented s
53c0: 74 6f 72 61 67 65 20 64 65 76 69 63 65 73 2e 0a  torage devices..
53d0: 46 6f 72 20 62 61 63 6b 67 72 6f 75 6e 64 20 69  For background i
53e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 62 2d  nformation on b-
53f0: 74 72 65 65 73 2c 20 73 65 65 0a 4b 6e 75 74 68  trees, see.Knuth
5400: 2c 20 3c 75 3e 54 68 65 20 41 72 74 20 4f 66 20  , <u>The Art Of 
5410: 43 6f 6d 70 75 74 65 72 20 50 72 6f 67 72 61 6d  Computer Program
5420: 6d 69 6e 67 3c 2f 75 3e 2c 20 56 6f 6c 75 6d 65  ming</u>, Volume
5430: 20 33 20 22 53 6f 72 74 69 6e 67 0a 61 6e 64 20   3 "Sorting.and 
5440: 53 65 61 72 63 68 69 6e 67 22 2c 20 70 61 67 65  Searching", page
5450: 73 20 34 37 31 2d 34 37 39 2e 20 20 54 77 6f 20  s 471-479.  Two 
5460: 6b 69 6e 64 73 20 6f 66 20 62 2d 74 72 65 65 73  kinds of b-trees
5470: 20 61 72 65 20 75 73 65 64 20 62 79 0a 53 51 4c   are used by.SQL
5480: 69 74 65 2e 20 20 54 68 65 20 61 6c 67 6f 72 69  ite.  The algori
5490: 74 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63  thm that Knuth c
54a0: 61 6c 6c 73 20 22 42 2a 2d 54 72 65 65 22 20 73  alls "B*-Tree" s
54b0: 74 6f 72 65 73 20 61 6c 6c 20 64 61 74 61 0a 69  tores all data.i
54c0: 6e 20 74 68 65 20 6c 65 61 76 65 73 20 6f 66 20  n the leaves of 
54d0: 74 68 65 20 74 72 65 65 2e 20 20 53 51 4c 69 74  the tree.  SQLit
54e0: 65 20 63 61 6c 6c 73 20 74 68 69 73 20 76 61 72  e calls this var
54f0: 69 65 74 79 20 6f 66 20 62 2d 74 72 65 65 0a 61  iety of b-tree.a
5500: 20 22 74 61 62 6c 65 20 62 2d 74 72 65 65 22 2e   "table b-tree".
5510: 20 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74   The algorithm t
5520: 68 61 74 20 4b 6e 75 74 68 20 63 61 6c 6c 73 20  hat Knuth calls 
5530: 73 69 6d 70 6c 79 20 22 42 2d 54 72 65 65 22 0a  simply "B-Tree".
5540: 73 74 6f 72 65 73 20 62 6f 74 68 20 74 68 65 20  stores both the 
5550: 6b 65 79 20 61 6e 64 20 74 68 65 20 64 61 74 61  key and the data
5560: 20 74 6f 67 65 74 68 65 72 20 69 6e 20 62 6f 74   together in bot
5570: 68 20 6c 65 61 76 65 73 0a 61 6e 64 20 69 6e 20  h leaves.and in 
5580: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 73 2e 20  interior pages. 
5590: 20 49 6e 20 74 68 65 20 53 51 4c 69 74 65 20 69   In the SQLite i
55a0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74  mplementation, t
55b0: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 42 2d 54 72  he original.B-Tr
55c0: 65 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 74 6f  ee algorithm sto
55d0: 72 65 73 20 6b 65 79 73 20 6f 6e 6c 79 2c 20 6f  res keys only, o
55e0: 6d 69 74 74 69 6e 67 20 74 68 65 20 64 61 74 61  mitting the data
55f0: 20 65 6e 74 69 72 65 6c 79 2c 20 61 6e 64 0a 69   entirely, and.i
5600: 73 20 63 61 6c 6c 65 64 20 61 6e 20 22 69 6e 64  s called an "ind
5610: 65 78 20 62 2d 74 72 65 65 22 2e 0a 0a 3c 70 3e  ex b-tree"...<p>
5620: 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73  A b-tree page is
5630: 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 72   either an inter
5640: 69 6f 72 20 70 61 67 65 20 6f 72 20 61 20 6c 65  ior page or a le
5650: 61 66 20 70 61 67 65 2e 0a 41 20 6c 65 61 66 20  af page..A leaf 
5660: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6b 65  page contains ke
5670: 79 73 20 61 6e 64 20 69 6e 20 74 68 65 20 63 61  ys and in the ca
5680: 73 65 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d  se of a table b-
5690: 74 72 65 65 20 65 61 63 68 0a 6b 65 79 20 68 61  tree each.key ha
56a0: 73 20 61 73 73 6f 63 69 61 74 65 64 20 64 61 74  s associated dat
56b0: 61 2e 20 20 41 6e 20 69 6e 74 65 72 69 6f 72 20  a.  An interior 
56c0: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 0a 4b 20  page contains.K 
56d0: 6b 65 79 73 20 74 6f 67 65 74 68 65 72 20 77 69  keys together wi
56e0: 74 68 20 4b 2b 31 20 70 6f 69 6e 74 65 72 73 20  th K+1 pointers 
56f0: 74 6f 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20  to child b-tree 
5700: 70 61 67 65 73 2e 0a 41 20 22 70 6f 69 6e 74 65  pages..A "pointe
5710: 72 22 20 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f  r" in an interio
5720: 72 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73  r b-tree page is
5730: 20 6a 75 73 74 20 74 68 65 20 33 31 2d 62 69 74   just the 31-bit
5740: 20 69 6e 74 65 67 65 72 0a 70 61 67 65 20 6e 75   integer.page nu
5750: 6d 62 65 72 20 6f 66 20 74 68 65 20 63 68 69 6c  mber of the chil
5760: 64 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  d page.</p>..<p>
5770: 44 65 66 69 6e 65 20 74 68 65 20 64 65 70 74 68  Define the depth
5780: 0a 6f 66 20 61 20 6c 65 61 66 20 62 2d 74 72 65  .of a leaf b-tre
5790: 65 20 74 6f 20 62 65 20 31 20 61 6e 64 20 74 68  e to be 1 and th
57a0: 65 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20 69  e depth of any i
57b0: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 74  nterior b-tree t
57c0: 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72 65 20 74 68  o be one.more th
57d0: 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 64  an the maximum d
57e0: 65 70 74 68 20 6f 66 20 61 6e 79 20 6f 66 20 69  epth of any of i
57f0: 74 73 20 63 68 69 6c 64 72 65 6e 2e 20 20 5e 49  ts children.  ^I
5800: 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a  n a well-formed.
5810: 64 61 74 61 62 61 73 65 2c 20 61 6c 6c 20 63 68  database, all ch
5820: 69 6c 64 72 65 6e 20 6f 66 20 61 6e 20 69 6e 74  ildren of an int
5830: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 68 61 76  erior b-tree hav
5840: 65 20 74 68 65 20 73 61 6d 65 20 64 65 70 74 68  e the same depth
5850: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20  .</p>..<p>In an 
5860: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
5870: 70 61 67 65 2c 20 74 68 65 20 70 6f 69 6e 74 65  page, the pointe
5880: 72 73 20 61 6e 64 20 6b 65 79 73 20 6c 6f 67 69  rs and keys logi
5890: 63 61 6c 6c 79 20 61 6c 74 65 72 6e 61 74 65 20  cally alternate 
58a0: 0a 77 69 74 68 20 61 20 70 6f 69 6e 74 65 72 20  .with a pointer 
58b0: 6f 6e 20 62 6f 74 68 20 65 6e 64 73 2e 20 28 54  on both ends. (T
58c0: 68 65 20 70 72 65 76 69 6f 75 73 20 73 65 6e 74  he previous sent
58d0: 65 6e 63 65 20 69 73 20 74 6f 20 62 65 20 75 6e  ence is to be un
58e0: 64 65 72 73 74 6f 6f 64 0a 63 6f 6e 63 65 70 74  derstood.concept
58f0: 75 61 6c 6c 79 20 2d 20 74 68 65 20 61 63 74 75  ually - the actu
5900: 61 6c 20 6c 61 79 6f 75 74 20 6f 66 20 74 68 65  al layout of the
5910: 20 6b 65 79 73 20 61 6e 64 0a 70 6f 69 6e 74 65   keys and.pointe
5920: 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 70 61  rs within the pa
5930: 67 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  ge is more compl
5940: 69 63 61 74 65 64 20 61 6e 64 20 77 69 6c 6c 20  icated and will 
5950: 62 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a  be described in.
5960: 74 68 65 20 73 65 71 75 65 6c 2e 29 20 20 41 6c  the sequel.)  Al
5970: 6c 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68  l keys within th
5980: 65 20 73 61 6d 65 20 70 61 67 65 20 61 72 65 20  e same page are 
5990: 75 6e 69 71 75 65 20 61 6e 64 20 61 72 65 20 6c  unique and are l
59a0: 6f 67 69 63 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a  ogically.organiz
59b0: 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  ed in ascending 
59c0: 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20  order from left 
59d0: 74 6f 20 72 69 67 68 74 2e 20 20 28 41 67 61 69  to right.  (Agai
59e0: 6e 2c 20 74 68 69 73 20 6f 72 64 65 72 69 6e 67  n, this ordering
59f0: 0a 69 73 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74  .is logical, not
5a00: 20 70 68 79 73 69 63 61 6c 2e 20 20 54 68 65 20   physical.  The 
5a10: 61 63 74 75 61 6c 20 6c 6f 63 61 74 69 6f 6e 20  actual location 
5a20: 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74  of keys within t
5a30: 68 65 20 70 61 67 65 0a 69 73 20 61 72 62 69 74  he page.is arbit
5a40: 72 61 72 79 2e 29 20 5e 46 6f 72 20 61 6e 79 20  rary.) ^For any 
5a50: 6b 65 79 20 58 2c 20 70 6f 69 6e 74 65 72 73 20  key X, pointers 
5a60: 74 6f 20 74 68 65 20 6c 65 66 74 0a 6f 66 20 61  to the left.of a
5a70: 20 58 20 72 65 66 65 72 20 74 6f 20 62 2d 74 72   X refer to b-tr
5a80: 65 65 20 70 61 67 65 73 20 6f 6e 20 77 68 69 63  ee pages on whic
5a90: 68 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6c  h all keys are l
5aa0: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
5ab0: 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65 72  l to X..^Pointer
5ac0: 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f  s to the right o
5ad0: 66 20 58 20 72 65 66 65 72 20 74 6f 20 70 61 67  f X refer to pag
5ae0: 65 73 20 77 68 65 72 65 20 61 6c 6c 20 6b 65 79  es where all key
5af0: 73 20 61 72 65 20 0a 67 72 65 61 74 65 72 20 74  s are .greater t
5b00: 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57  han X.</p>..<p>W
5b10: 69 74 68 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f  ithin an interio
5b20: 72 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 65  r b-tree page, e
5b30: 61 63 68 20 6b 65 79 20 61 6e 64 20 74 68 65 20  ach key and the 
5b40: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 0a 69  pointer to its.i
5b50: 6d 6d 65 64 69 61 74 65 20 6c 65 66 74 20 61 72  mmediate left ar
5b60: 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20  e combined into 
5b70: 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c  a structure call
5b80: 65 64 20 61 20 22 63 65 6c 6c 22 2e 20 20 54 68  ed a "cell".  Th
5b90: 65 0a 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69  e.right-most poi
5ba0: 6e 74 65 72 20 69 73 20 68 65 6c 64 20 73 65 70  nter is held sep
5bb0: 61 72 61 74 65 6c 79 2e 20 20 41 20 6c 65 61 66  arately.  A leaf
5bc0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61 73   b-tree page has
5bd0: 20 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c 20 62 75   no.pointers, bu
5be0: 74 20 69 74 20 73 74 69 6c 6c 20 75 73 65 73 20  t it still uses 
5bf0: 74 68 65 20 63 65 6c 6c 20 73 74 72 75 63 74 75  the cell structu
5c00: 72 65 20 74 6f 20 68 6f 6c 64 20 6b 65 79 73 20  re to hold keys 
5c10: 66 6f 72 0a 69 6e 64 65 78 20 62 2d 74 72 65 65  for.index b-tree
5c20: 73 20 6f 72 20 6b 65 79 73 20 61 6e 64 20 63 6f  s or keys and co
5c30: 6e 74 65 6e 74 20 66 6f 72 20 74 61 62 6c 65 20  ntent for table 
5c40: 62 2d 74 72 65 65 73 2e 20 20 44 61 74 61 20 69  b-trees.  Data i
5c50: 73 20 61 6c 73 6f 0a 63 6f 6e 74 61 69 6e 65 64  s also.contained
5c60: 20 69 6e 20 74 68 65 20 63 65 6c 6c 2e 0a 3c 2f   in the cell..</
5c70: 70 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62 2d 74  p>..<p>Every b-t
5c80: 72 65 65 20 70 61 67 65 20 68 61 73 20 61 74 20  ree page has at 
5c90: 6d 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e 74 20  most one parent 
5ca0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 20 62  b-tree page..A b
5cb0: 2d 74 72 65 65 20 70 61 67 65 20 77 69 74 68 6f  -tree page witho
5cc0: 75 74 20 61 20 70 61 72 65 6e 74 20 69 73 20 63  ut a parent is c
5cd0: 61 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70 61 67  alled a root pag
5ce0: 65 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74 72 65  e.  A root b-tre
5cf0: 65 20 70 61 67 65 0a 74 6f 67 65 74 68 65 72 20  e page.together 
5d00: 77 69 74 68 20 74 68 65 20 63 6c 6f 73 75 72 65  with the closure
5d10: 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e   of its children
5d20: 20 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65 74 65   form a complete
5d30: 20 62 2d 74 72 65 65 2e 0a 49 74 20 69 73 20 70   b-tree..It is p
5d40: 6f 73 73 69 62 6c 65 20 28 61 6e 64 20 69 6e 20  ossible (and in 
5d50: 66 61 63 74 20 72 61 74 68 65 72 20 63 6f 6d 6d  fact rather comm
5d60: 6f 6e 29 20 74 6f 20 68 61 76 65 20 61 20 63 6f  on) to have a co
5d70: 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 0a 74 68  mplete b-tree.th
5d80: 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  at consists of a
5d90: 20 73 69 6e 67 6c 65 20 70 61 67 65 20 74 68 61   single page tha
5da0: 74 20 69 73 20 62 6f 74 68 20 61 20 6c 65 61 66  t is both a leaf
5db0: 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e 0a 42   and the root..B
5dc0: 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
5dd0: 20 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20 70   pointers from p
5de0: 61 72 65 6e 74 73 20 74 6f 20 63 68 69 6c 64 72  arents to childr
5df0: 65 6e 2c 20 65 76 65 72 79 20 70 61 67 65 20 6f  en, every page o
5e00: 66 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62 2d 74  f a.complete b-t
5e10: 72 65 65 20 63 61 6e 20 62 65 20 6c 6f 63 61 74  ree can be locat
5e20: 65 64 20 69 66 20 6f 6e 6c 79 20 74 68 65 20 72  ed if only the r
5e30: 6f 6f 74 20 70 61 67 65 20 69 73 20 6b 6e 6f 77  oot page is know
5e40: 6e 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74 72 65  n.  Hence,.b-tre
5e50: 65 73 20 61 72 65 20 69 64 65 6e 74 69 66 69 65  es are identifie
5e60: 64 20 62 79 20 74 68 65 69 72 20 72 6f 6f 74 20  d by their root 
5e70: 70 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e  page number.</p>
5e80: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
5e90: 67 65 20 69 73 20 65 69 74 68 65 72 20 61 20 74  ge is either a t
5ea0: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
5eb0: 20 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74   or an index b-t
5ec0: 72 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20 70 61  ree page..All pa
5ed0: 67 65 73 20 77 69 74 68 69 6e 20 65 61 63 68 20  ges within each 
5ee0: 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20  complete b-tree 
5ef0: 61 72 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20  are of the same 
5f00: 74 79 70 65 3a 20 65 69 74 68 65 72 20 74 61 62  type: either tab
5f10: 6c 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le.or index.  Th
5f20: 65 72 65 20 69 73 20 61 20 6f 6e 65 20 74 61 62  ere is a one tab
5f30: 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74 68  le b-trees in th
5f40: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
5f50: 66 6f 72 20 65 61 63 68 20 72 6f 77 69 64 20 74  for each rowid t
5f60: 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74 61  able in the data
5f70: 62 61 73 65 20 73 63 68 65 6d 61 2c 20 69 6e 63  base schema, inc
5f80: 6c 75 64 69 6e 67 20 73 79 73 74 65 6d 20 74 61  luding system ta
5f90: 62 6c 65 73 0a 73 75 63 68 20 61 73 20 73 71 6c  bles.such as sql
5fa0: 69 74 65 5f 6d 61 73 74 65 72 2e 20 20 54 68 65  ite_master.  The
5fb0: 72 65 20 69 73 20 6f 6e 65 20 69 6e 64 65 78 20  re is one index 
5fc0: 62 2d 74 72 65 65 73 0a 69 6e 20 74 68 65 20 64  b-trees.in the d
5fd0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
5fe0: 20 65 61 63 68 20 69 6e 64 65 78 20 69 6e 20 74   each index in t
5ff0: 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75  he schema, inclu
6000: 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64  ding implied ind
6010: 65 78 65 73 0a 63 72 65 61 74 65 64 20 62 79 20  exes.created by 
6020: 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74  uniqueness const
6030: 72 61 69 6e 74 73 2e 20 20 54 68 65 72 65 20 61  raints.  There a
6040: 72 65 20 6e 6f 20 62 2d 74 72 65 65 73 20 61 73  re no b-trees as
6050: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 5b 76  sociated with.[v
6060: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 20  irtual tables]. 
6070: 20 53 70 65 63 69 66 69 63 20 76 69 72 74 75 61   Specific virtua
6080: 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
6090: 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 6d 61  tations might ma
60a0: 6b 65 20 75 73 65 0a 6f 66 20 5b 73 68 61 64 6f  ke use.of [shado
60b0: 77 20 74 61 62 6c 65 73 5d 20 66 6f 72 20 73 74  w tables] for st
60c0: 6f 72 61 67 65 2c 20 62 75 74 20 74 68 6f 73 65  orage, but those
60d0: 20 73 68 61 64 6f 77 20 74 61 62 6c 65 73 20 77   shadow tables w
60e0: 69 6c 6c 20 68 61 76 65 20 73 65 70 61 72 61 74  ill have separat
60f0: 65 0a 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  e.entries in the
6100: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6110: 2e 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  .  [WITHOUT ROWI
6120: 44 5d 20 74 61 62 6c 65 73 20 75 73 65 20 69 6e  D] tables use in
6130: 64 65 78 20 62 2d 74 72 65 65 73 0a 72 61 74 68  dex b-trees.rath
6140: 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20  er than a table 
6150: 62 2d 74 72 65 65 73 2c 20 73 6f 20 74 68 65 72  b-trees, so ther
6160: 65 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78 20 62  e is one.index b
6170: 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64 61 74  -tree in the dat
6180: 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 65  abase file for e
6190: 61 63 68 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  ach [WITHOUT ROW
61a0: 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20 62  ID] table..The b
61b0: 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64  -tree correspond
61c0: 69 6e 67 20 74 6f 20 74 68 65 20 73 71 6c 69 74  ing to the sqlit
61d0: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
61e0: 73 20 61 6c 77 61 79 73 20 61 20 74 61 62 6c 65  s always a table
61f0: 0a 62 2d 74 72 65 65 20 61 6e 64 20 61 6c 77 61  .b-tree and alwa
6200: 79 73 20 68 61 73 20 61 20 72 6f 6f 74 20 70 61  ys has a root pa
6210: 67 65 20 6f 66 20 31 2e 0a 54 68 65 20 73 71 6c  ge of 1..The sql
6220: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
6230: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
6240: 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  ot page number f
6250: 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72 20 0a  or every other .
6260: 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 20  table and index 
6270: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
6280: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  file.</p>..<p>Ea
6290: 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74 61  ch entry in a ta
62a0: 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73 69  ble b-tree consi
62b0: 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74 20  sts of a 64-bit 
62c0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b  signed integer k
62d0: 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31 34  ey.and up to 214
62e0: 37 34 38 33 36 34 37 20 62 79 74 65 73 20 6f 66  7483647 bytes of
62f0: 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e   arbitrary data.
6300: 20 20 28 54 68 65 20 6b 65 79 20 6f 66 20 61 20    (The key of a 
6310: 74 61 62 6c 65 20 62 2d 74 72 65 65 0a 63 6f 72  table b-tree.cor
6320: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
6330: 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 53  [rowid] of the S
6340: 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  QL table that th
6350: 65 20 62 2d 74 72 65 65 20 69 6d 70 6c 65 6d 65  e b-tree impleme
6360: 6e 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72 20 74  nts.).Interior t
6370: 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 6f 6c  able b-trees hol
6380: 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64 20  d only keys and 
6390: 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69 6c  pointers to chil
63a0: 64 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61 20 69  dren..All data i
63b0: 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  s contained in t
63c0: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  he table b-tree 
63d0: 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  leaves.</p>..<p>
63e0: 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 6e  Each entry in an
63f0: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63 6f   index b-tree co
6400: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 62  nsists of an arb
6410: 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20 75 70  itrary key of up
6420: 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37 20 62  .to 2147483647 b
6430: 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20 61  ytes in length a
6440: 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e 0a  nd no data.</p>.
6450: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
6460: 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20 7b  t cell_payload {
6470: 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f 74  cell payload}</t
6480: 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68  cl>.<p>Define th
6490: 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66 20 61  e "payload" of a
64a0: 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68 65 20   cell to be the 
64b0: 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68  arbitrary length
64c0: 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65 20   section.of the 
64d0: 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69 6e  cell.  For an in
64e0: 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68 65 20  dex b-tree, the 
64f0: 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20 61 72  key is always ar
6500: 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e 67 74  bitrary in lengt
6510: 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20  h.and hence the 
6520: 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20 6b  payload is the k
6530: 65 79 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  ey.  There are n
6540: 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67  o arbitrary leng
6550: 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20 74  th elements.in t
6560: 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74 65  he cells of inte
6570: 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65  rior table b-tre
6580: 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f 20 74  e pages and so t
6590: 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76 65 20  hose cells have 
65a0: 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61 62  no.payload.  Tab
65b0: 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70  le b-tree leaf p
65c0: 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61 72 62  ages contain arb
65d0: 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 63 6f  itrary length co
65e0: 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f 72  ntent and.so for
65f0: 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65 20   cells on those 
6600: 70 61 67 65 73 20 74 68 65 20 70 61 79 6c 6f 61  pages the payloa
6610: 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  d is the content
6620: 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 73 69  ..<p>When the si
6630: 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20 66 6f  ze of payload fo
6640: 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65 64 73  r a cell exceeds
6650: 20 61 20 63 65 72 74 61 69 6e 20 74 68 72 65 73   a certain thres
6660: 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65 66 69  hold (to.be defi
6670: 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65 6e 20  ned later) then 
6680: 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 66  only the first f
6690: 65 77 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  ew bytes of the 
66a0: 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f 72  payload.are stor
66b0: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
66c0: 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 62 61   page and the ba
66d0: 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65 64 20  lance is stored 
66e0: 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  in a linked list
66f0: 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65 72  .of content over
6700: 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e 0a  flow pages.</p>.
6710: 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67  .<p>A b-tree pag
6720: 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
6730: 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74 68 65  o regions in the
6740: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65 72   following order
6750: 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20  :..<ol>.<li>The 
6760: 31 30 30 2d 62 79 74 65 20 64 61 74 61 62 61 73  100-byte databas
6770: 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 28 66  e file header (f
6780: 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31 20 6f  ound on page 1 o
6790: 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20 6f  nly).<li>The 8 o
67a0: 72 20 31 32 20 62 79 74 65 20 62 2d 74 72 65 65  r 12 byte b-tree
67b0: 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c 6c 69   page header.<li
67c0: 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65  >The cell pointe
67d0: 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61 6c  r array.<li>Unal
67e0: 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a 3c 6c  located space.<l
67f0: 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  i>The cell conte
6800: 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65 20  nt area.<li>The 
6810: 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 2e  reserved region.
6820: 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e  .</ol>.</p>..<p>
6830: 54 68 65 20 31 30 30 2d 62 79 74 65 20 64 61 74  The 100-byte dat
6840: 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65  abase file heade
6850: 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79 20  r is found only 
6860: 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69 63 68  on page 1, which
6870: 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74 61 62   is.always a tab
6880: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20  le b-tree page. 
6890: 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72 65   All other b-tre
68a0: 65 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64  e pages in the d
68b0: 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d 69  atabase file.omi
68c0: 74 20 74 68 69 73 20 31 30 30 2d 62 79 74 65 20  t this 100-byte 
68d0: 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  header.</p>..<p>
68e0: 54 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67  The reserved reg
68f0: 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61 20 6f  ion is an area o
6900: 66 20 75 6e 75 73 65 64 20 73 70 61 63 65 20 61  f unused space a
6910: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65  t the end of eve
6920: 72 79 0a 70 61 67 65 20 28 65 78 63 65 70 74 20  ry.page (except 
6930: 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67 65  the locking page
6940: 29 20 74 68 61 74 20 65 78 74 65 6e 73 69 6f 6e  ) that extension
6950: 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68 6f 6c  s can use to hol
6960: 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f 72  d per-page.infor
6970: 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20 73 69  mation.  ^The si
6980: 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76  ze of the reserv
6990: 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65 74  ed region is det
69a0: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6f  ermined by the o
69b0: 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65 64  ne-byte.unsigned
69c0: 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20 61   integer found a
69d0: 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 32  t an offset of 2
69e0: 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  0 into the datab
69f0: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 2e  ase file header.
6a00: 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65  .The size of the
6a10: 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e   reserved region
6a20: 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72 6f   is usually zero
6a30: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d  .</p>..<p>The b-
6a40: 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72  tree page header
6a50: 20 69 73 20 38 20 62 79 74 65 73 20 69 6e 20 73   is 8 bytes in s
6a60: 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61 67  ize for leaf pag
6a70: 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73 20  es and 12.bytes 
6a80: 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61 67  for interior pag
6a90: 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62 79  es.  All multiby
6aa0: 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  te values in the
6ab0: 20 70 61 67 65 20 68 65 61 64 65 72 0a 61 72 65   page header.are
6ac0: 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68 65   big-endian..The
6ad0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61   b-tree page hea
6ae0: 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64 20  der is composed 
6af0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
6b00: 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c 63   fields:</p>..<c
6b10: 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65  enter>.<i>B-tree
6b20: 20 50 61 67 65 20 48 65 61 64 65 72 20 46 6f 72   Page Header For
6b30: 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
6b40: 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74  le border=1 widt
6b50: 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68  h="80%">.<tr><th
6b60: 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
6b70: 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
6b80: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
6b90: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 30  ter valign=top>0
6ba0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6bb0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64   valign=top>1<td
6bc0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 66   align=left>.A f
6bd0: 6c 61 67 20 69 6e 64 69 63 61 74 69 6e 67 20 74  lag indicating t
6be0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 74  he b-tree page t
6bf0: 79 70 65 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20  ype.^A value of 
6c00: 32 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65  2 means the page
6c10: 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20   is an interior 
6c20: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
6c30: 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 35  e..^A value of 5
6c40: 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20   means the page 
6c50: 69 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 74  is an interior t
6c60: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
6c70: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 30  ..^A value of 10
6c80: 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20   means the page 
6c90: 69 73 20 61 20 6c 65 61 66 20 69 6e 64 65 78 20  is a leaf index 
6ca0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20  b-tree page..^A 
6cb0: 76 61 6c 75 65 20 6f 66 20 31 33 20 6d 65 61 6e  value of 13 mean
6cc0: 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61 20  s the page is a 
6cd0: 6c 65 61 66 20 74 61 62 6c 65 20 62 2d 74 72 65  leaf table b-tre
6ce0: 65 20 70 61 67 65 2e 0a 5e 41 6e 79 20 6f 74 68  e page..^Any oth
6cf0: 65 72 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  er value for the
6d00: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70   b-tree page typ
6d10: 65 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c  e is an error..<
6d20: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
6d30: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31  ter valign=top>1
6d40: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6d50: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64   valign=top>2<td
6d60: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 79 74   align=left>.Byt
6d70: 65 20 6f 66 66 73 65 74 20 69 6e 74 6f 20 74 68  e offset into th
6d80: 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 66 69  e page of the fi
6d90: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 0a 3c 74  rst freeblock.<t
6da0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
6db0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 33 3c  er valign=top>3<
6dc0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6dd0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
6de0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75 6d 62  align=left>.Numb
6df0: 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74  er of cells on t
6e00: 68 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64  his page.<tr><td
6e10: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6e20: 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64 20 61 6c  lign=top>5<td al
6e30: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6e40: 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e  n=top>2<td align
6e50: 3d 6c 65 66 74 3e 0a 4f 66 66 73 65 74 20 74 6f  =left>.Offset to
6e60: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6e70: 6f 66 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  of the cell cont
6e80: 65 6e 74 20 61 72 65 61 2e 20 20 41 20 7a 65 72  ent area.  A zer
6e90: 6f 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  o value is used 
6ea0: 74 6f 20 72 65 70 72 65 73 65 6e 74 20 61 6e 20  to represent an 
6eb0: 6f 66 66 73 65 74 20 6f 66 20 36 35 35 33 36 2c  offset of 65536,
6ec0: 20 77 68 69 63 68 20 6f 63 63 75 72 73 20 6f 6e   which occurs on
6ed0: 20 61 6e 20 65 6d 70 74 79 20 72 6f 6f 74 20 70   an empty root p
6ee0: 61 67 65 20 77 68 65 6e 20 75 73 69 6e 67 20 61  age when using a
6ef0: 20 36 35 35 33 36 2d 62 79 74 65 20 70 61 67 65   65536-byte page
6f00: 20 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20 61   size..<tr><td a
6f10: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6f20: 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69 67  gn=top>7<td alig
6f30: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6f40: 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>1<td align=l
6f50: 65 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66 20 66  eft>.Number of f
6f60: 72 61 67 6d 65 6e 74 65 64 20 66 72 65 65 20 62  ragmented free b
6f70: 79 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  ytes within the 
6f80: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65  cell content are
6f90: 61 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  a.<tr><td align=
6fa0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6fb0: 70 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>8<td align=cen
6fc0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34  ter valign=top>4
6fd0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
6fe0: 54 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 70  The right-most p
6ff0: 6f 69 6e 74 65 72 20 28 69 6e 74 65 72 69 6f 72  ointer (interior
7000: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e   b-tree pages on
7010: 6c 79 29 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c  ly).</table></bl
7020: 6f 63 6b 71 75 6f 74 65 3e 3c 2f 63 65 6e 74 65  ockquote></cente
7030: 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 65 6c 6c  r>..<p>^The cell
7040: 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 20 6f   pointer array o
7050: 66 20 61 20 62 2d 74 72 65 65 20 70 61 67 65 20  f a b-tree page 
7060: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
7070: 6f 77 73 20 74 68 65 20 62 2d 74 72 65 65 0a 70  ows the b-tree.p
7080: 61 67 65 20 68 65 61 64 65 72 2e 20 20 4c 65 74  age header.  Let
7090: 20 4b 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72   K be the number
70a0: 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68 65   of cells on the
70b0: 20 62 74 72 65 65 2e 20 20 5e 54 68 65 20 63 65   btree.  ^The ce
70c0: 6c 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72 61 79  ll pointer.array
70d0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b 20 32   consists of K 2
70e0: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6f 66  -byte integer of
70f0: 66 73 65 74 73 20 74 6f 20 74 68 65 20 63 65 6c  fsets to the cel
7100: 6c 20 63 6f 6e 74 65 6e 74 73 2e 20 20 5e 54 68  l contents.  ^Th
7110: 65 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72 73 20  e.cell pointers 
7120: 61 72 65 20 61 72 72 61 6e 67 65 64 20 69 6e 20  are arranged in 
7130: 6b 65 79 20 6f 72 64 65 72 20 77 69 74 68 20 6c  key order with l
7140: 65 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74  eft-most cell (t
7150: 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68 65  he cell with the
7160: 0a 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29 20 66  .smallest key) f
7170: 69 72 73 74 20 61 6e 64 20 74 68 65 20 72 69 67  irst and the rig
7180: 68 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68  ht-most cell (th
7190: 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68 65 20  e cell with the 
71a0: 6c 61 72 67 65 73 74 0a 6b 65 79 29 20 6c 61 73  largest.key) las
71b0: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c 6c 20  t.</p>..<p>Cell 
71c0: 63 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f 72 65  content is store
71d0: 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f  d in the cell co
71e0: 6e 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f 66 20  ntent region of 
71f0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
7200: 0a 53 51 4c 69 74 65 20 73 74 72 69 76 65 73 20  .SQLite strives 
7210: 74 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73 20 61  to place cells a
7220: 73 20 66 61 72 20 74 6f 77 61 72 64 20 74 68 65  s far toward the
7230: 20 65 6e 64 20 6f 66 20 74 68 65 20 62 2d 74 72   end of the b-tr
7240: 65 65 20 70 61 67 65 20 61 73 0a 69 74 20 63 61  ee page as.it ca
7250: 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c  n, in order to l
7260: 65 61 76 65 20 73 70 61 63 65 20 66 6f 72 20 66  eave space for f
7270: 75 74 75 72 65 20 67 72 6f 77 74 68 20 6f 66 20  uture growth of 
7280: 74 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72  the cell pointer
7290: 20 61 72 72 61 79 2e 0a 54 68 65 20 61 72 65 61   array..The area
72a0: 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20   in between the 
72b0: 6c 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e 74 65  last cell pointe
72c0: 72 20 61 72 72 61 79 20 65 6e 74 72 79 20 61 6e  r array entry an
72d0: 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  d the beginning 
72e0: 6f 66 0a 74 68 65 20 66 69 72 73 74 20 63 65 6c  of.the first cel
72f0: 6c 20 69 73 20 74 68 65 20 75 6e 61 6c 6c 6f 63  l is the unalloc
7300: 61 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 70  ated region..</p
7310: 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 70 61 67 65  >..<p>^If a page
7320: 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 65 6c   contains no cel
7330: 6c 73 20 28 77 68 69 63 68 20 69 73 20 6f 6e 6c  ls (which is onl
7340: 79 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61  y possible for a
7350: 20 72 6f 6f 74 20 70 61 67 65 0a 6f 66 20 61 20   root page.of a 
7360: 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
7370: 69 6e 73 20 6e 6f 20 72 6f 77 73 29 20 74 68 65  ins no rows) the
7380: 6e 20 74 68 65 20 6f 66 66 73 65 74 20 74 6f 20  n the offset to 
7390: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
73a0: 0a 61 72 65 61 20 77 69 6c 6c 20 65 71 75 61 6c  .area will equal
73b0: 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 6d   the page size m
73c0: 69 6e 75 73 20 74 68 65 20 62 79 74 65 73 20 6f  inus the bytes o
73d0: 66 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65  f reserved space
73e0: 2e 20 20 5e 28 49 66 0a 74 68 65 20 64 61 74 61  .  ^(If.the data
73f0: 62 61 73 65 20 75 73 65 73 20 61 20 36 35 35 33  base uses a 6553
7400: 36 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a 65  6-byte page size
7410: 20 61 6e 64 20 74 68 65 20 72 65 73 65 72 76 65   and the reserve
7420: 64 20 73 70 61 63 65 20 69 73 20 7a 65 72 6f 0a  d space is zero.
7430: 28 74 68 65 20 75 73 75 61 6c 20 76 61 6c 75 65  (the usual value
7440: 20 66 6f 72 20 72 65 73 65 72 76 65 64 20 73 70   for reserved sp
7450: 61 63 65 29 20 74 68 65 6e 20 74 68 65 20 63 65  ace) then the ce
7460: 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 66 73 65  ll content offse
7470: 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79 20 70 61  t of an.empty pa
7480: 67 65 20 77 61 6e 74 73 20 74 6f 20 62 65 20 36  ge wants to be 6
7490: 35 35 33 36 2e 20 20 0a 48 6f 77 65 76 65 72 2c  5536.  .However,
74a0: 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 69 73   that integer is
74b0: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65   too large to be
74c0: 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 32 2d 62   stored in a.2-b
74d0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
74e0: 65 67 65 72 2c 20 73 6f 20 61 20 76 61 6c 75 65  eger, so a value
74f0: 20 6f 66 20 30 20 69 73 20 75 73 65 64 20 69 6e   of 0 is used in
7500: 20 69 74 73 20 70 6c 61 63 65 2e 29 5e 0a 0a 3c   its place.)^..<
7510: 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 69 73  p>A freeblock is
7520: 20 61 20 73 74 72 75 63 74 75 72 65 20 75 73 65   a structure use
7530: 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 75 6e  d to identify un
7540: 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
7550: 77 69 74 68 69 6e 0a 61 20 62 2d 74 72 65 65 20  within.a b-tree 
7560: 70 61 67 65 2e 20 20 46 72 65 65 62 6c 6f 63 6b  page.  Freeblock
7570: 73 20 61 72 65 20 6f 72 67 61 6e 69 7a 65 64 20  s are organized 
7580: 61 73 20 61 20 63 68 61 69 6e 2e 20 20 5e 54 68  as a chain.  ^Th
7590: 65 20 66 69 72 73 74 20 32 20 62 79 74 65 73 20  e first 2 bytes 
75a0: 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b 20 61  of.a freeblock a
75b0: 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20  re a big-endian 
75c0: 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
75d0: 20 74 68 65 20 6f 66 66 73 65 74 20 69 6e 20 74   the offset in t
75e0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 0a 6f  he b-tree page.o
75f0: 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65 62  f the next freeb
7600: 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63 68 61 69  lock in the chai
7610: 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68  n, or zero if th
7620: 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20 74  e freeblock is t
7630: 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65 20 63  he last on.the c
7640: 68 61 69 6e 2e 20 20 5e 54 68 65 20 74 68 69 72  hain.  ^The thir
7650: 64 20 61 6e 64 20 66 6f 75 72 74 68 20 62 79 74  d and fourth byt
7660: 65 73 20 6f 66 20 65 61 63 68 20 66 72 65 65 62  es of each freeb
7670: 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69 67 2d  lock form.a big-
7680: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 77  endian integer w
7690: 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a 65  hich is the size
76a0: 20 6f 66 20 74 68 65 20 66 72 65 65 62 6c 6f 63   of the freebloc
76b0: 6b 20 69 6e 20 62 79 74 65 73 2c 20 69 6e 63 6c  k in bytes, incl
76c0: 75 64 69 6e 67 0a 74 68 65 20 34 2d 62 79 74 65  uding.the 4-byte
76d0: 20 68 65 61 64 65 72 2e 20 20 5e 46 72 65 65 62   header.  ^Freeb
76e0: 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77 61 79 73  locks are always
76f0: 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20 6f 72   connected in or
7700: 64 65 72 20 0a 6f 66 20 69 6e 63 72 65 61 73 69  der .of increasi
7710: 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e 54 68 65  ng offset.  ^The
7720: 20 73 65 63 6f 6e 64 20 66 69 65 6c 64 20 6f 66   second field of
7730: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
7740: 20 68 65 61 64 65 72 20 69 73 20 74 68 65 0a 6f   header is the.o
7750: 66 66 73 65 74 20 6f 66 20 74 68 65 20 66 69 72  ffset of the fir
7760: 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20 6f 72  st freeblock, or
7770: 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 61   zero if there a
7780: 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73  re no freeblocks
7790: 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20 20 5e   on the.page.  ^
77a0: 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  In a well-formed
77b0: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 74 68   b-tree page, th
77c0: 65 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ere will always 
77d0: 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  be at least one 
77e0: 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68 65 20  cell.before the 
77f0: 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2e  first freeblock.
7800: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 62  </p>..<p>A freeb
7810: 6c 6f 63 6b 20 72 65 71 75 69 72 65 73 20 61 74  lock requires at
7820: 20 6c 65 61 73 74 20 34 20 62 79 74 65 73 20 6f   least 4 bytes o
7830: 66 20 73 70 61 63 65 2e 20 20 49 66 20 74 68 65  f space.  If the
7840: 72 65 20 69 73 20 61 6e 20 69 73 6f 6c 61 74 65  re is an isolate
7850: 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20 32 2c  d.group of 1, 2,
7860: 20 6f 72 20 33 20 75 6e 75 73 65 64 20 62 79 74   or 3 unused byt
7870: 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 65  es within the ce
7880: 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c  ll content area,
7890: 20 74 68 6f 73 65 20 62 79 74 65 73 0a 63 6f 6d   those bytes.com
78a0: 70 72 69 73 65 20 61 20 66 72 61 67 6d 65 6e 74  prise a fragment
78b0: 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c 20 6e 75  .  ^The total nu
78c0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
78d0: 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20 69   all fragments i
78e0: 73 20 73 74 6f 72 65 64 0a 69 6e 20 74 68 65 20  s stored.in the 
78f0: 66 69 66 74 68 20 66 69 65 6c 64 20 6f 66 20 74  fifth field of t
7900: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  he b-tree page h
7910: 65 61 64 65 72 2e 20 20 5e 49 6e 20 61 20 77 65  eader.  ^In a we
7920: 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65  ll-formed b-tree
7930: 20 70 61 67 65 2c 0a 74 68 65 20 74 6f 74 61 6c   page,.the total
7940: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
7950: 20 69 6e 20 66 72 61 67 6d 65 6e 74 73 20 6d 61   in fragments ma
7960: 79 20 6e 6f 74 20 65 78 63 65 65 64 20 36 30 2e  y not exceed 60.
7970: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f 74  </p>..<p>The tot
7980: 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66 72 65  al amount of fre
7990: 65 20 73 70 61 63 65 20 6f 6e 20 61 20 62 2d 74  e space on a b-t
79a0: 72 65 65 20 70 61 67 65 20 63 6f 6e 73 69 73 74  ree page consist
79b0: 73 20 6f 66 20 74 68 65 20 73 69 7a 65 0a 6f 66  s of the size.of
79c0: 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64   the unallocated
79d0: 20 72 65 67 69 6f 6e 20 70 6c 75 73 20 74 68 65   region plus the
79e0: 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20 61   total size of a
79f0: 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20 70 6c  ll freeblocks pl
7a00: 75 73 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66  us the.number of
7a10: 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65 65   fragmented free
7a20: 20 62 79 74 65 73 2e 20 20 5e 53 51 4c 69 74 65   bytes.  ^SQLite
7a30: 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65 20 74   may from time t
7a40: 6f 20 74 69 6d 65 20 72 65 6f 72 67 61 6e 69 7a  o time reorganiz
7a50: 65 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65 20  e.a b-tree page 
7a60: 73 6f 20 74 68 61 74 20 74 68 65 72 65 20 61 72  so that there ar
7a70: 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20  e no freeblocks 
7a80: 6f 72 20 66 72 61 67 6d 65 6e 74 20 62 79 74 65  or fragment byte
7a90: 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20 62 79  s, all.unused by
7aa0: 74 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  tes are containe
7ab0: 64 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c 6f 63  d in the unalloc
7ac0: 61 74 65 64 20 73 70 61 63 65 20 72 65 67 69 6f  ated space regio
7ad0: 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c 73  n, and all.cells
7ae0: 20 61 72 65 20 70 61 63 6b 65 64 20 74 69 67 68   are packed tigh
7af0: 74 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tly at the end o
7b00: 66 20 74 68 65 20 70 61 67 65 2e 20 20 54 68 69  f the page.  Thi
7b10: 73 20 69 73 20 63 61 6c 6c 65 64 20 0a 22 64 65  s is called ."de
7b20: 66 72 61 67 6d 65 6e 74 69 6e 67 22 20 74 68 65  fragmenting" the
7b30: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f 70   b-tree page.</p
7b40: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
7b50: 65 6e 74 20 76 61 72 69 6e 74 20 7b 76 61 72 69  ent varint {vari
7b60: 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
7b70: 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f 74  ger} {varint}</t
7b80: 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69 61 62  cl>..<p>A variab
7b90: 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
7ba0: 72 20 6f 72 20 22 76 61 72 69 6e 74 22 20 69 73  r or "varint" is
7bb0: 20 61 20 73 74 61 74 69 63 20 48 75 66 66 6d 61   a static Huffma
7bc0: 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20 36 34  n encoding.of 64
7bd0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
7be0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 73 20 74 68  ment integers th
7bf0: 61 74 20 75 73 65 73 20 6c 65 73 73 20 73 70 61  at uses less spa
7c00: 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70 6f 73  ce for small pos
7c10: 69 74 69 76 65 20 0a 76 61 6c 75 65 73 2e 20 0a  itive .values. .
7c20: 41 20 76 61 72 69 6e 74 20 69 73 20 62 65 74 77  A varint is betw
7c30: 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74 65  een 1 and 9 byte
7c40: 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54 68  s in length.  Th
7c50: 65 20 76 61 72 69 6e 74 20 63 6f 6e 73 69 73 74  e varint consist
7c60: 73 20 6f 66 20 65 69 74 68 65 72 0a 7a 65 72 6f  s of either.zero
7c70: 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 20 77 68   or more byte wh
7c80: 69 63 68 20 68 61 76 65 20 74 68 65 20 68 69 67  ich have the hig
7c90: 68 2d 6f 72 64 65 72 20 62 69 74 20 73 65 74 20  h-order bit set 
7ca0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 73 69  followed by a si
7cb0: 6e 67 6c 65 20 62 79 74 65 0a 77 69 74 68 20 74  ngle byte.with t
7cc0: 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
7cd0: 74 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69 6e 65  t clear, or nine
7ce0: 20 62 79 74 65 73 2c 20 77 68 69 63 68 65 76 65   bytes, whicheve
7cf0: 72 20 69 73 20 73 68 6f 72 74 65 72 2e 0a 54 68  r is shorter..Th
7d00: 65 20 6c 6f 77 65 72 20 73 65 76 65 6e 20 62 69  e lower seven bi
7d10: 74 73 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  ts of each of th
7d20: 65 20 66 69 72 73 74 20 65 69 67 68 74 20 62 79  e first eight by
7d30: 74 65 73 20 61 6e 64 20 61 6c 6c 20 38 20 62 69  tes and all 8 bi
7d40: 74 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74 68 20  ts of.the ninth 
7d50: 62 79 74 65 20 61 72 65 20 75 73 65 64 20 74 6f  byte are used to
7d60: 20 72 65 63 6f 6e 73 74 72 75 63 74 20 74 68 65   reconstruct the
7d70: 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   64-bit twos-com
7d80: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e  plement integer.
7d90: 0a 56 61 72 69 6e 74 73 20 61 72 65 20 62 69 67  .Varints are big
7da0: 2d 65 6e 64 69 61 6e 3a 20 62 69 74 73 20 74 61  -endian: bits ta
7db0: 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 65 61 72  ken from the ear
7dc0: 6c 69 65 72 20 62 79 74 65 20 6f 66 20 74 68 65  lier byte of the
7dd0: 20 76 61 72 69 6e 74 0a 61 72 65 20 74 68 65 20   varint.are the 
7de0: 6d 6f 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74  more significant
7df0: 20 61 6e 64 20 62 69 74 73 20 74 61 6b 65 6e 20   and bits taken 
7e00: 66 72 6f 6d 20 74 68 65 20 6c 61 74 65 72 20 62  from the later b
7e10: 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 54  ytes. </p>..<p>T
7e20: 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 63  he format of a c
7e30: 65 6c 6c 20 64 65 70 65 6e 64 73 20 6f 6e 20 77  ell depends on w
7e40: 68 69 63 68 20 6b 69 6e 64 20 6f 66 20 62 2d 74  hich kind of b-t
7e50: 72 65 65 20 70 61 67 65 20 74 68 65 20 63 65 6c  ree page the cel
7e60: 6c 0a 61 70 70 65 61 72 73 20 6f 6e 2e 20 20 54  l.appears on.  T
7e70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
7e80: 6c 65 20 73 68 6f 77 73 20 74 68 65 20 65 6c 65  le shows the ele
7e90: 6d 65 6e 74 73 20 6f 66 20 61 20 63 65 6c 6c 2c  ments of a cell,
7ea0: 20 69 6e 0a 6f 72 64 65 72 20 6f 66 20 61 70 70   in.order of app
7eb0: 65 61 72 61 6e 63 65 2c 20 66 6f 72 20 74 68 65  earance, for the
7ec0: 20 76 61 72 69 6f 75 73 20 62 2d 74 72 65 65 20   various b-tree 
7ed0: 70 61 67 65 20 74 79 70 65 73 2e 3c 2f 70 3e 0a  page types.</p>.
7ee0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c  .<blockquote><dl
7ef0: 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42  >.<dt><p>Table B
7f00: 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a  -Tree Leaf Cell:
7f10: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
7f20: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69  ><ul>.<li>A vari
7f30: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
7f40: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
7f50: 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64  bytes of payload
7f60: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a  , including any.
7f70: 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20 76  overflow.<li>A v
7f80: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
7f90: 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79 2c 20  he integer key, 
7fa0: 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69 64 5d 22  a.k.a. "[rowid]"
7fb0: 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c  .<li>The initial
7fc0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20   portion of the 
7fd0: 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65  payload that doe
7fe0: 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f  s not spill to o
7ff0: 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c  verflow.pages..<
8000: 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d  li>A 4-byte big-
8010: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70  endian integer p
8020: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  age number for t
8030: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
8040: 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61   the.overflow pa
8050: 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65  ge list - omitte
8060: 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64  d if all payload
8070: 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74   fits on the b-t
8080: 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c  ree page..</ul><
8090: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70  /p></dd>..<dt><p
80a0: 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49 6e  >Table B-Tree In
80b0: 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e  terior Cell:</p>
80c0: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c  </dt>.<dd><p><ul
80d0: 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62  >.<li>A 4-byte b
80e0: 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e  ig-endian page n
80f0: 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74  umber which is t
8100: 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f  he left child po
8110: 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72  inter..<li>A var
8120: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
8130: 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75   integer key.</u
8140: 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  l></p></dd>..<dt
8150: 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65  ><p>Index B-Tree
8160: 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c   Leaf Cell:</p><
8170: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e  /dt>.<dd><p><ul>
8180: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
8190: 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ich is the total
81a0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
81b0: 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c   of key payload,
81c0: 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f   including any.o
81d0: 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20  verflow.<li>The 
81e0: 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20  initial portion 
81f0: 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74  of the payload t
8200: 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69  hat does not spi
8210: 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70  ll to overflow.p
8220: 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ages..<li>A 4-by
8230: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
8240: 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65  teger page numbe
8250: 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  r for the first 
8260: 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72  page of the.over
8270: 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d  flow page list -
8280: 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20   omitted if all 
8290: 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20  payload fits on 
82a0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
82b0: 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a  .</ul></p></dd>.
82c0: 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d  .<dt><p>Index B-
82d0: 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65  Tree Interior Ce
82e0: 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  ll:</p></dt>.<dd
82f0: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34  ><p><ul>.<li>A 4
8300: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
8310: 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63  page number whic
8320: 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63 68  h is the left ch
8330: 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69  ild pointer..<li
8340: 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20  >A varint which 
8350: 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  is the total num
8360: 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
8370: 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63  key payload, inc
8380: 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66  luding any.overf
8390: 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74  low.<li>The init
83a0: 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74  ial portion of t
83b0: 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  he payload that 
83c0: 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74  does not spill t
83d0: 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73  o overflow.pages
83e0: 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62  ..<li>A 4-byte b
83f0: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
8400: 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  r page number fo
8410: 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65  r the first page
8420: 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77   of the.overflow
8430: 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69   page list - omi
8440: 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c  tted if all payl
8450: 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20  oad fits on the 
8460: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75  b-tree page..</u
8470: 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c  l></p></dd>.</dl
8480: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
8490: 3c 70 3e 54 68 65 20 69 6e 66 6f 72 6d 61 74 69  <p>The informati
84a0: 6f 6e 20 61 62 6f 76 65 20 63 61 6e 20 62 65 20  on above can be 
84b0: 72 65 63 61 73 74 20 69 6e 74 6f 20 61 20 74 61  recast into a ta
84c0: 62 6c 65 20 66 6f 72 6d 61 74 20 61 73 20 66 6f  ble format as fo
84d0: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c  llows:</p>..<tcl
84e0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c  >hd_fragment cel
84f0: 6c 66 6f 72 6d 61 74 20 7b 63 65 6c 6c 20 66 6f  lformat {cell fo
8500: 72 6d 61 74 20 73 75 6d 6d 61 72 79 7d 3c 2f 74  rmat summary}</t
8510: 63 6c 3e 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  cl>.<center>.<i>
8520: 42 2d 74 72 65 65 20 43 65 6c 6c 20 46 6f 72 6d  B-tree Cell Form
8530: 61 74 3c 2f 69 3e 0a 3c 74 61 62 6c 65 20 62 6f  at</i>.<table bo
8540: 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38 30  rder=1 width="80
8550: 25 22 3e 0a 3c 74 72 3e 3c 74 68 20 72 6f 77 73  %">.<tr><th rows
8560: 70 61 6e 3d 32 3e 44 61 74 61 74 79 70 65 0a 20  pan=2>Datatype. 
8570: 20 20 20 3c 74 68 20 63 6f 6c 73 70 61 6e 3d 34     <th colspan=4
8580: 3e 41 70 70 65 61 72 73 20 69 6e 2e 2e 2e 0a 20  >Appears in.... 
8590: 20 20 20 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32     <th rowspan=2
85a0: 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
85b0: 3e 3c 74 68 3e 54 61 62 6c 65 20 4c 65 61 66 0a  ><th>Table Leaf.
85c0: 20 20 20 20 3c 74 68 3e 54 61 62 6c 65 20 49 6e      <th>Table In
85d0: 74 65 72 69 6f 72 0a 20 20 20 20 3c 74 68 3e 49  terior.    <th>I
85e0: 6e 64 65 78 20 4c 65 61 66 0a 20 20 20 20 3c 74  ndex Leaf.    <t
85f0: 68 3e 49 6e 64 65 78 20 49 6e 74 65 72 69 6f 72  h>Index Interior
8600: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
8610: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8620: 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a  >4-byte integer.
8630: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8640: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8650: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
8660: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8670: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8680: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8690: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
86a0: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
86b0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
86c0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
86d0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65      <td align=le
86e0: 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f  ft>Page number o
86f0: 66 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c 74 72  f left child.<tr
8700: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
8710: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72  r valign=top>var
8720: 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  int.    <td alig
8730: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8740: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8750: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8760: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8770: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8780: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8790: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
87a0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
87b0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
87c0: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
87d0: 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65 72 20  ign=left>Number 
87e0: 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c  of bytes of payl
87f0: 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  oad.<tr><td alig
8800: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8810: 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c  top>varint.    <
8820: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8830: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8840: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8850: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8860: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8870: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8880: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8890: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
88a0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
88b0: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
88c0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 52 6f  td align=left>Ro
88d0: 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  wid.<tr><td alig
88e0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
88f0: 74 6f 70 3e 62 79 74 65 20 61 72 72 61 79 0a 20  top>byte array. 
8900: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8910: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8920: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8930: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8940: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8950: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8960: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8970: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8980: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8990: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
89a0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c  .    <td align=l
89b0: 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74 72 3e  eft>Payload.<tr>
89c0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
89d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79   valign=top>4-by
89e0: 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c  te integer.    <
89f0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8a00: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8a10: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8a20: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8a30: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8a40: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8a50: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8a60: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8a70: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8a80: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8a90: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8aa0: 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 66  Page number of f
8ab0: 69 72 73 74 20 6f 76 65 72 66 6c 6f 77 20 70 61  irst overflow pa
8ac0: 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e  ge.</table></cen
8ad0: 74 65 72 3e 0a 0a 0a 0a 3c 74 72 3e 3c 74 64 20  ter>....<tr><td 
8ae0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8af0: 69 67 6e 3d 74 6f 70 3e 0a 0a 3c 70 3e 54 68 65  ign=top>..<p>The
8b00: 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f   amount of paylo
8b10: 61 64 20 74 68 61 74 20 73 70 69 6c 6c 73 20 6f  ad that spills o
8b20: 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67  nto overflow pag
8b30: 65 73 20 61 6c 73 6f 20 64 65 70 65 6e 64 73 20  es also depends 
8b40: 6f 6e 0a 74 68 65 20 70 61 67 65 20 74 79 70 65  on.the page type
8b50: 2e 20 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  .  For the follo
8b60: 77 69 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f 6e  wing computation
8b70: 73 2c 20 6c 65 74 20 55 20 62 65 20 74 68 65 20  s, let U be the 
8b80: 75 73 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20 61  usable size.of a
8b90: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 2c 20   database page, 
8ba0: 74 68 65 20 74 6f 74 61 6c 20 70 61 67 65 20 73  the total page s
8bb0: 69 7a 65 20 6c 65 73 73 20 74 68 65 20 72 65 73  ize less the res
8bc0: 65 72 76 65 64 20 73 70 61 63 65 20 61 74 20 74  erved space at t
8bd0: 68 65 0a 65 6e 64 20 6f 66 20 65 61 63 68 20 70  he.end of each p
8be0: 61 67 65 2e 20 20 41 6e 64 20 6c 65 74 20 50 20  age.  And let P 
8bf0: 62 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73  be the payload s
8c00: 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  ize.</p>..<block
8c10: 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 54  quote><dl>.<dt>T
8c20: 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66  able B-Tree Leaf
8c30: 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e   Cell:</dt>.<dd>
8c40: 3c 70 3e 0a 5e 49 66 20 74 68 65 20 70 61 79 6c  <p>.^If the payl
8c50: 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c 65  oad size P is le
8c60: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
8c70: 20 74 6f 20 55 2d 33 35 20 74 68 65 6e 0a 74 68   to U-35 then.th
8c80: 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64  e entire payload
8c90: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68   is stored on th
8ca0: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
8cb0: 67 65 2e 20 20 0a 5e 28 4c 65 74 20 4d 20 62 65  ge.  .^(Let M be
8cc0: 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29   ((U-12)*32/255)
8cd0: 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20 67 72  -23.  If P is gr
8ce0: 65 61 74 65 72 20 74 68 61 6e 20 55 2d 33 35 0a  eater than U-35.
8cf0: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
8d00: 6f 66 20 62 79 74 65 20 73 74 6f 72 65 64 20 6f  of byte stored o
8d10: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 6c 65 61  n the b-tree lea
8d20: 66 20 70 61 67 65 20 69 73 20 74 68 65 20 73 6d  f page is the sm
8d30: 61 6c 6c 65 72 20 6f 66 0a 4d 2b 28 28 50 2d 4d  aller of.M+((P-M
8d40: 29 25 28 55 2d 34 29 29 20 61 6e 64 20 55 2d 33  )%(U-4)) and U-3
8d50: 35 2e 29 5e 0a 5e 28 4e 6f 74 65 20 74 68 61 74  5.)^.^(Note that
8d60: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
8d70: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 6c   stored on the l
8d80: 65 61 66 20 70 61 67 65 20 69 73 20 6e 65 76 65  eaf page is neve
8d90: 72 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e  r less than M.)^
8da0: 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  .</p></dd>..<dt>
8db0: 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49 6e 74  Table B-Tree Int
8dc0: 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e  erior Cell:</dt>
8dd0: 0a 3c 64 64 3e 3c 70 3e 0a 49 6e 74 65 72 69 6f  .<dd><p>.Interio
8de0: 72 20 70 61 67 65 73 20 6f 66 20 74 61 62 6c 65  r pages of table
8df0: 20 62 2d 74 72 65 65 73 20 68 61 76 65 20 6e 6f   b-trees have no
8e00: 20 70 61 79 6c 6f 61 64 20 61 6e 64 20 73 6f 20   payload and so 
8e10: 74 68 65 72 65 20 69 73 20 6e 65 76 65 72 0a 61  there is never.a
8e20: 6e 79 20 70 61 79 6c 6f 61 64 20 74 6f 20 73 70  ny payload to sp
8e30: 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  ill..</p></dd>..
8e40: 3c 64 74 3e 49 6e 64 65 78 20 42 2d 54 72 65 65  <dt>Index B-Tree
8e50: 20 4c 65 61 66 20 4f 72 20 49 6e 74 65 72 69 6f   Leaf Or Interio
8e60: 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64  r Cell:</dt>.<dd
8e70: 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58 20 62 65 20  ><p>.^(Let X be 
8e80: 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29 2d  ((U-12)*64/255)-
8e90: 32 33 29 2e 20 20 49 66 20 74 68 65 20 70 61 79  23).  If the pay
8ea0: 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c  load size P is l
8eb0: 65 73 73 20 74 68 61 6e 0a 6f 72 20 65 71 75 61  ess than.or equa
8ec0: 6c 20 74 6f 20 58 20 74 68 65 6e 20 74 68 65 20  l to X then the 
8ed0: 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 20 69  entire payload i
8ee0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
8ef0: 62 2d 74 72 65 65 20 70 61 67 65 2e 29 5e 0a 5e  b-tree page.)^.^
8f00: 28 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32  (Let M be ((U-12
8f10: 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49  )*32/255)-23.  I
8f20: 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20 74  f P is greater t
8f30: 68 61 6e 20 58 20 74 68 65 6e 20 74 68 65 20 6e  han X then the n
8f40: 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 20 73 74  umber.of byte st
8f50: 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72  ored on the b-tr
8f60: 65 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73  ee page is the s
8f70: 6d 61 6c 6c 65 72 20 6f 66 0a 4d 2b 28 28 50 2d  maller of.M+((P-
8f80: 4d 29 25 28 55 2d 34 29 29 20 61 6e 64 20 58 2e  M)%(U-4)) and X.
8f90: 29 5e 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20 6e  )^.^(Note that n
8fa0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 73  umber of bytes s
8fb0: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 69 6e 64  tored on the ind
8fc0: 65 78 20 70 61 67 65 20 69 73 20 6e 65 76 65 72  ex page is never
8fd0: 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a   less than M.)^.
8fe0: 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c  </p></dd>.</dl><
8ff0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
9000: 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77 20 74 68  >The overflow th
9010: 72 65 73 68 6f 6c 64 73 20 61 72 65 20 64 65 73  resholds are des
9020: 69 67 6e 65 64 20 74 6f 20 67 69 76 65 20 61 20  igned to give a 
9030: 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74 20 6f  minimum fanout o
9040: 66 0a 34 20 66 6f 72 20 69 6e 64 65 78 20 62 2d  f.4 for index b-
9050: 74 72 65 65 73 20 61 6e 64 20 74 6f 20 6d 61 6b  trees and to mak
9060: 65 20 73 75 72 65 20 65 6e 6f 75 67 68 20 6f 66  e sure enough of
9070: 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 69 73 20   the payload.is 
9080: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
9090: 67 65 20 74 68 61 74 20 74 68 65 20 72 65 63 6f  ge that the reco
90a0: 72 64 20 68 65 61 64 65 72 20 63 61 6e 20 75 73  rd header can us
90b0: 75 61 6c 6c 79 20 62 65 20 61 63 63 65 73 73 65  ually be accesse
90c0: 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73 75 6c  d.without consul
90d0: 74 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c 6f 77  ting an overflow
90e0: 20 70 61 67 65 2e 20 20 49 6e 20 68 69 6e 64 73   page.  In hinds
90f0: 69 67 68 74 2c 20 74 68 65 20 64 65 73 69 67 6e  ight, the design
9100: 65 72 73 20 6f 66 0a 74 68 65 20 53 51 4c 69 74  ers of.the SQLit
9110: 65 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20 72  e b-tree logic r
9120: 65 61 6c 69 7a 65 20 74 68 61 74 20 74 68 65 73  ealize that thes
9130: 65 20 74 68 72 65 73 68 6f 6c 64 73 20 63 6f 75  e thresholds cou
9140: 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 6d 61 64  ld have been.mad
9150: 65 20 6d 75 63 68 20 73 69 6d 70 6c 65 72 2e 20  e much simpler. 
9160: 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f   However, the co
9170: 6d 70 75 74 61 74 69 6f 6e 73 20 63 61 6e 6e 6f  mputations canno
9180: 74 20 62 65 20 63 68 61 6e 67 65 64 0a 77 69 74  t be changed.wit
9190: 68 6f 75 74 20 72 65 73 75 6c 74 69 6e 67 20 69  hout resulting i
91a0: 6e 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c  n an incompatibl
91b0: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20  e file format.  
91c0: 41 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20  And the current 
91d0: 63 6f 6d 70 75 74 61 74 69 6f 6e 73 0a 77 6f 72  computations.wor
91e0: 6b 20 77 65 6c 6c 2c 20 65 76 65 6e 20 69 66 20  k well, even if 
91f0: 74 68 65 79 20 61 72 65 20 61 20 6c 69 74 74 6c  they are a littl
9200: 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a  e complex.</p>..
9210: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
9220: 20 6f 76 66 6c 70 67 73 20 7b 6f 76 65 72 66 6c   ovflpgs {overfl
9230: 6f 77 20 70 61 67 65 7d 20 7b 6f 76 65 72 66 6c  ow page} {overfl
9240: 6f 77 20 70 61 67 65 73 7d 3c 2f 74 63 6c 3e 0a  ow pages}</tcl>.
9250: 3c 68 33 3e 31 2e 36 20 43 65 6c 6c 20 50 61 79  <h3>1.6 Cell Pay
9260: 6c 6f 61 64 20 4f 76 65 72 66 6c 6f 77 20 50 61  load Overflow Pa
9270: 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68  ges</h3>..<p>^Wh
9280: 65 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 20 6f  en the payload o
9290: 66 20 61 20 62 2d 74 72 65 65 20 63 65 6c 6c 20  f a b-tree cell 
92a0: 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f 72  is too large for
92b0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
92c0: 2c 0a 74 68 65 20 73 75 72 70 6c 75 73 20 69 73  ,.the surplus is
92d0: 20 73 70 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76   spilled onto ov
92e0: 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 20 20 5e  erflow pages.  ^
92f0: 4f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20 66  Overflow pages f
9300: 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 0a 6c 69 73  orm a linked.lis
9310: 74 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 66  t.  ^The first f
9320: 6f 75 72 20 62 79 74 65 73 20 6f 66 20 65 61 63  our bytes of eac
9330: 68 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  h overflow page 
9340: 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e  are a big-endian
9350: 0a 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69  .integer which i
9360: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
9370: 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20 70 61  r of the next pa
9380: 67 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2c  ge in the chain,
9390: 20 6f 72 20 7a 65 72 6f 0a 66 6f 72 20 74 68 65   or zero.for the
93a0: 20 66 69 6e 61 6c 20 70 61 67 65 20 69 6e 20 74   final page in t
93b0: 68 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20  he chain.  ^The 
93c0: 66 69 66 74 68 20 62 79 74 65 20 74 68 72 6f 75  fifth byte throu
93d0: 67 68 20 74 68 65 20 6c 61 73 74 20 75 73 61 62  gh the last usab
93e0: 6c 65 0a 62 79 74 65 20 61 72 65 20 75 73 65 64  le.byte are used
93f0: 20 74 6f 20 68 6f 6c 64 20 6f 76 65 72 66 6c 6f   to hold overflo
9400: 77 20 63 6f 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a  w content.</p>..
9410: 3c 68 33 3e 31 2e 37 20 50 6f 69 6e 74 65 72 20  <h3>1.7 Pointer 
9420: 4d 61 70 20 6f 72 20 50 74 72 6d 61 70 20 50 61  Map or Ptrmap Pa
9430: 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 50 6f 69  ges</h3>..<p>Poi
9440: 6e 74 65 72 20 6d 61 70 20 6f 72 20 70 74 72 6d  nter map or ptrm
9450: 61 70 20 70 61 67 65 73 20 61 72 65 20 65 78 74  ap pages are ext
9460: 72 61 20 70 61 67 65 73 20 69 6e 73 65 72 74 65  ra pages inserte
9470: 64 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  d into the datab
9480: 61 73 65 0a 74 6f 20 6d 61 6b 65 20 74 68 65 20  ase.to make the 
9490: 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 5b 61 75  operation of [au
94a0: 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b  to_vacuum] and [
94b0: 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75  incremental_vacu
94c0: 75 6d 5d 20 6d 6f 64 65 73 0a 6d 6f 72 65 20 65  um] modes.more e
94d0: 66 66 69 63 69 65 6e 74 2e 20 20 4f 74 68 65 72  fficient.  Other
94e0: 20 70 61 67 65 20 74 79 70 65 73 20 69 6e 20 74   page types in t
94f0: 68 65 20 64 61 74 61 62 61 73 65 20 74 79 70 69  he database typi
9500: 63 61 6c 6c 79 20 68 61 76 65 20 70 6f 69 6e 74  cally have point
9510: 65 72 73 0a 66 72 6f 6d 20 70 61 72 65 6e 74 20  ers.from parent 
9520: 74 6f 20 63 68 69 6c 64 2e 20 20 46 6f 72 20 65  to child.  For e
9530: 78 61 6d 70 6c 65 2c 20 61 6e 20 69 6e 74 65 72  xample, an inter
9540: 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 20  ior b-tree page 
9550: 63 6f 6e 74 61 69 6e 73 20 70 6f 69 6e 74 65 72  contains pointer
9560: 73 0a 74 6f 20 69 74 73 20 63 68 69 6c 64 20 62  s.to its child b
9570: 2d 74 72 65 65 20 70 61 67 65 73 20 61 6e 64 20  -tree pages and 
9580: 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69  an overflow chai
9590: 6e 20 68 61 73 20 61 20 70 6f 69 6e 74 65 72 0a  n has a pointer.
95a0: 66 72 6f 6d 20 65 61 72 6c 69 65 72 20 74 6f 20  from earlier to 
95b0: 6c 61 74 65 72 20 6c 69 6e 6b 73 20 69 6e 20 74  later links in t
95c0: 68 65 20 63 68 61 69 6e 2e 20 20 41 20 70 74 72  he chain.  A ptr
95d0: 6d 61 70 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  map page contain
95e0: 73 20 6c 69 6e 6b 61 67 65 0a 69 6e 66 6f 72 6d  s linkage.inform
95f0: 61 74 69 6f 6e 20 67 6f 69 6e 67 20 69 6e 20 74  ation going in t
9600: 68 65 20 6f 70 70 6f 73 69 74 65 20 64 69 72 65  he opposite dire
9610: 63 74 69 6f 6e 2c 20 66 72 6f 6d 20 63 68 69 6c  ction, from chil
9620: 64 20 74 6f 20 70 61 72 65 6e 74 2e 3c 2f 70 3e  d to parent.</p>
9630: 0a 0a 3c 70 3e 5e 50 74 72 6d 61 70 20 70 61 67  ..<p>^Ptrmap pag
9640: 65 73 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e  es must exist in
9650: 20 61 6e 79 20 64 61 74 61 62 61 73 65 20 66 69   any database fi
9660: 6c 65 20 77 68 69 63 68 20 68 61 73 20 61 20 6e  le which has a n
9670: 6f 6e 2d 7a 65 72 6f 0a 6c 61 72 67 65 73 74 20  on-zero.largest 
9680: 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65  root b-tree page
9690: 20 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74   value at offset
96a0: 20 35 32 20 69 6e 20 74 68 65 20 64 61 74 61 62   52 in the datab
96b0: 61 73 65 20 68 65 61 64 65 72 2e 0a 5e 49 66 20  ase header..^If 
96c0: 74 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f 74  the largest root
96d0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c   b-tree page val
96e0: 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  ue is zero, then
96f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 75   the database mu
9700: 73 74 20 6e 6f 74 0a 63 6f 6e 74 61 69 6e 20 70  st not.contain p
9710: 74 72 6d 61 70 20 70 61 67 65 73 2e 3c 2f 70 3e  trmap pages.</p>
9720: 0a 0a 3c 70 3e 5e 49 6e 20 61 20 64 61 74 61 62  ..<p>^In a datab
9730: 61 73 65 20 77 69 74 68 20 70 74 72 6d 61 70 20  ase with ptrmap 
9740: 70 61 67 65 73 2c 20 74 68 65 20 66 69 72 73 74  pages, the first
9750: 20 70 74 72 6d 61 70 20 70 61 67 65 20 69 73 20   ptrmap page is 
9760: 70 61 67 65 20 32 2e 0a 41 20 70 74 72 6d 61 70  page 2..A ptrmap
9770: 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f   page consists o
9780: 66 20 61 6e 20 61 72 72 61 79 20 6f 66 20 35 2d  f an array of 5-
9790: 62 79 74 65 20 65 6e 74 72 69 65 73 2e 20 20 4c  byte entries.  L
97a0: 65 74 20 4a 20 62 65 20 74 68 65 0a 6e 75 6d 62  et J be the.numb
97b0: 65 72 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74  er of 5-byte ent
97c0: 72 69 65 73 20 74 68 61 74 20 77 69 6c 6c 20 66  ries that will f
97d0: 69 74 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65  it in the usable
97e0: 20 73 70 61 63 65 20 6f 66 20 61 20 70 61 67 65   space of a page
97f0: 2e 0a 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ..(In other word
9800: 73 2c 20 4a 3d 55 2f 35 2e 29 20 20 5e 54 68 65  s, J=U/5.)  ^The
9810: 20 66 69 72 73 74 20 70 74 72 6d 61 70 20 70 61   first ptrmap pa
9820: 67 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  ge will contain 
9830: 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66  back pointer.inf
9840: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67  ormation for pag
9850: 65 73 20 33 20 74 68 72 6f 75 67 68 20 4a 2b 32  es 3 through J+2
9860: 2c 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 5e 54  , inclusive.  ^T
9870: 68 65 20 73 65 63 6f 6e 64 20 70 6f 69 6e 74 65  he second pointe
9880: 72 20 6d 61 70 0a 70 61 67 65 20 77 69 6c 6c 20  r map.page will 
9890: 62 65 20 6f 6e 20 70 61 67 65 20 4a 2b 33 20 61  be on page J+3 a
98a0: 6e 64 20 74 68 61 74 20 70 74 72 6d 61 70 20 70  nd that ptrmap p
98b0: 61 67 65 20 77 69 6c 6c 20 70 72 6f 76 69 64 65  age will provide
98c0: 20 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e   back pointer.in
98d0: 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61  formation for pa
98e0: 67 65 73 20 4a 2b 34 20 74 68 72 6f 75 67 68 20  ges J+4 through 
98f0: 32 2a 4a 2b 33 20 69 6e 63 6c 75 73 69 76 65 2e  2*J+3 inclusive.
9900: 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 20 66    And so forth f
9910: 6f 72 0a 74 68 65 20 65 6e 74 69 72 65 20 64 61  or.the entire da
9920: 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
9930: 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 64 61 74 61  ..<p>^(In a data
9940: 62 61 73 65 20 74 68 61 74 20 75 73 65 73 20 70  base that uses p
9950: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c  trmap pages, all
9960: 20 70 61 67 65 73 20 61 74 20 6c 6f 63 61 74 69   pages at locati
9970: 6f 6e 73 20 69 64 65 6e 74 69 66 69 65 64 0a 62  ons identified.b
9980: 79 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f  y the computatio
9990: 6e 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  n in the previou
99a0: 73 20 70 61 72 61 67 72 61 70 68 20 6d 75 73 74  s paragraph must
99b0: 20 62 65 20 70 74 72 6d 61 70 20 70 61 67 65 20   be ptrmap page 
99c0: 61 6e 64 20 6e 6f 0a 6f 74 68 65 72 20 70 61 67  and no.other pag
99d0: 65 20 6d 61 79 20 62 65 20 61 20 70 74 72 6d 61  e may be a ptrma
99e0: 70 20 70 61 67 65 2e 20 20 45 78 63 65 70 74 2c  p page.  Except,
99f0: 20 69 66 20 74 68 65 20 62 79 74 65 2d 6c 6f 63   if the byte-loc
9a00: 6b 20 70 61 67 65 20 68 61 70 70 65 6e 73 20 74  k page happens t
9a10: 6f 0a 66 61 6c 6c 20 6f 6e 20 74 68 65 20 73 61  o.fall on the sa
9a20: 6d 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 61  me page number a
9a30: 73 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 2c  s a ptrmap page,
9a40: 20 74 68 65 6e 20 74 68 65 20 70 74 72 6d 61 70   then the ptrmap
9a50: 20 69 73 20 6d 6f 76 65 64 0a 74 6f 20 74 68 65   is moved.to the
9a60: 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 67 65 20   following page 
9a70: 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 63 61 73  for that one cas
9a80: 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  e.)^</p>..<p>Eac
9a90: 68 20 35 2d 62 79 74 65 20 65 6e 74 72 79 20 6f  h 5-byte entry o
9aa0: 6e 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 20  n a ptrmap page 
9ab0: 70 72 6f 76 69 64 65 73 20 62 61 63 6b 2d 6c 69  provides back-li
9ac0: 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  nk information a
9ad0: 62 6f 75 74 20 0a 6f 6e 65 20 6f 66 20 70 61 67  bout .one of pag
9ae0: 65 73 20 74 68 61 74 20 69 6d 6d 65 64 69 61 74  es that immediat
9af0: 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70  ely follow the p
9b00: 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28 49  ointer map.  ^(I
9b10: 66 20 70 61 67 65 20 42 20 69 73 20 61 0a 70 74  f page B is a.pt
9b20: 72 6d 61 70 20 70 61 67 65 20 74 68 65 6e 20 62  rmap page then b
9b30: 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61  ack-link informa
9b40: 74 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20  tion about page 
9b50: 42 2b 31 20 69 73 20 70 72 6f 76 69 64 65 64 20  B+1 is provided 
9b60: 62 79 0a 74 68 65 20 66 69 72 73 74 20 65 6e 74  by.the first ent
9b70: 72 79 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74 65  ry on the pointe
9b80: 72 20 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61 74  r map.  Informat
9b90: 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42  ion about page B
9ba0: 2b 32 20 69 73 0a 70 72 6f 76 69 64 65 64 20 62  +2 is.provided b
9bb0: 79 20 74 68 65 20 73 65 63 6f 6e 64 20 65 6e 74  y the second ent
9bc0: 72 79 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74  ry.  And so fort
9bd0: 68 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  h.)^</p>..<p>Eac
9be0: 68 20 35 2d 62 79 74 65 20 70 74 72 6d 61 70 20  h 5-byte ptrmap 
9bf0: 65 6e 74 72 79 20 63 6f 6e 73 69 73 74 73 20 6f  entry consists o
9c00: 66 20 6f 6e 65 20 62 79 74 65 20 6f 66 20 22 70  f one byte of "p
9c10: 61 67 65 20 74 79 70 65 22 20 69 6e 66 6f 72 6d  age type" inform
9c20: 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62  ation.followed b
9c30: 79 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  y a 4-byte big-e
9c40: 6e 64 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65  ndian page numbe
9c50: 72 2e 20 20 46 69 76 65 20 70 61 67 65 20 74 79  r.  Five page ty
9c60: 70 65 73 20 61 72 65 20 72 65 63 6f 67 6e 69 7a  pes are recogniz
9c70: 65 64 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ed:.</p>..<ol>.<
9c80: 6c 69 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f 74  li>A b-tree root
9c90: 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65   page.  The.page
9ca0: 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62   number should b
9cb0: 65 20 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72  e zero..<li>A fr
9cc0: 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68  eelist page.  Th
9cd0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68  e page number sh
9ce0: 6f 75 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c  ould be.zero..<l
9cf0: 69 3e 54 68 65 20 66 69 72 73 74 20 70 61 67 65  i>The first page
9d00: 20 6f 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c 6f   of a.cell paylo
9d10: 61 64 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69  ad overflow chai
9d20: 6e 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d  n.  The page num
9d30: 62 65 72 20 69 73 20 74 68 65 20 62 2d 74 72 65  ber is the b-tre
9d40: 65 20 70 61 67 65 20 74 68 61 74 0a 63 6f 6e 74  e page that.cont
9d50: 61 69 6e 73 20 74 68 65 20 63 65 6c 6c 20 77 68  ains the cell wh
9d60: 6f 73 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20  ose content has 
9d70: 6f 76 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e  overflowed..<li>
9d80: 41 20 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65  A page in an ove
9d90: 72 66 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68 65  rflow chain.othe
9da0: 72 20 74 68 61 6e 20 74 68 65 20 66 69 72 73 74  r than the first
9db0: 20 70 61 67 65 2e 20 20 54 68 65 20 70 61 67 65   page.  The page
9dc0: 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 70   number is the p
9dd0: 72 69 6f 72 20 70 61 67 65 20 6f 66 20 74 68 65  rior page of the
9de0: 0a 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e  .overflow chain.
9df0: 0a 3c 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20  .<li>A non-root 
9e00: 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 54 68  b-tree page.  Th
9e10: 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73  e.page number is
9e20: 20 74 68 65 20 70 61 72 65 6e 74 20 62 2d 74 72   the parent b-tr
9e30: 65 65 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a  ee page..</ol>..
9e40: 3c 70 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61 62  <p>^In any datab
9e50: 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 63 6f  ase file that co
9e60: 6e 74 61 69 6e 73 20 70 74 72 6d 61 70 20 70 61  ntains ptrmap pa
9e70: 67 65 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65 20  ges, all b-tree 
9e80: 72 6f 6f 74 20 70 61 67 65 73 20 0a 6d 75 73 74  root pages .must
9e90: 20 63 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e 79   come before any
9ea0: 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65   non-root b-tree
9eb0: 20 70 61 67 65 2c 20 63 65 6c 6c 20 70 61 79 6c   page, cell payl
9ec0: 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70 61 67  oad overflow pag
9ed0: 65 2c 20 6f 72 0a 66 72 65 65 6c 69 73 74 20 70  e, or.freelist p
9ee0: 61 67 65 2e 20 20 54 68 69 73 20 72 65 73 74 72  age.  This restr
9ef0: 69 63 74 69 6f 6e 20 65 6e 73 75 72 65 73 20 74  iction ensures t
9f00: 68 61 74 20 61 20 72 6f 6f 74 20 70 61 67 65 20  hat a root page 
9f10: 77 69 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d 6f  will never.be mo
9f20: 76 65 64 20 64 75 72 69 6e 67 20 61 6e 20 61 75  ved during an au
9f30: 74 6f 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e 63  to-vacuum or inc
9f40: 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 2e  remental-vacuum.
9f50: 20 20 54 68 65 20 61 75 74 6f 2d 76 61 63 75 75    The auto-vacuu
9f60: 6d 0a 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f 74  m.logic does not
9f70: 20 6b 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70 64   know how to upd
9f80: 61 74 65 20 74 68 65 20 72 6f 6f 74 5f 70 61 67  ate the root_pag
9f90: 65 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73  e field of the s
9fa0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 74 61 62  qlite_master.tab
9fb0: 6c 65 20 61 6e 64 20 73 6f 20 69 74 20 69 73 20  le and so it is 
9fc0: 6e 65 63 65 73 73 61 72 79 20 74 6f 20 70 72 65  necessary to pre
9fd0: 76 65 6e 74 20 72 6f 6f 74 20 70 61 67 65 73 20  vent root pages 
9fe0: 66 72 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65 64  from being moved
9ff0: 0a 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d  .during an auto-
a000: 76 61 63 75 75 6d 20 69 6e 20 6f 72 64 65 72 20  vacuum in order 
a010: 74 6f 20 70 72 65 73 65 72 76 65 20 74 68 65 20  to preserve the 
a020: 69 6e 74 65 67 72 69 74 79 20 6f 66 20 74 68 65  integrity of the
a030: 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74  .sqlite_master t
a040: 61 62 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61 67  able.  ^Root pag
a050: 65 73 20 61 72 65 20 6d 6f 76 65 64 20 74 6f 20  es are moved to 
a060: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
a070: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66 69   the.database fi
a080: 6c 65 20 62 79 20 74 68 65 20 43 52 45 41 54 45  le by the CREATE
a090: 20 54 41 42 4c 45 2c 20 43 52 45 41 54 45 20 49   TABLE, CREATE I
a0a0: 4e 44 45 58 2c 20 44 52 4f 50 20 54 41 42 4c 45  NDEX, DROP TABLE
a0b0: 2c 20 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45 58  , and.DROP INDEX
a0c0: 20 6f 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e   operations.</p>
a0d0: 0a 0a 3c 68 32 3e 32 2e 30 20 53 63 68 65 6d 61  ..<h2>2.0 Schema
a0e0: 20 4c 61 79 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e   Layer</h2>..<p>
a0f0: 54 68 65 20 66 6f 72 65 67 6f 69 6e 67 20 74 65  The foregoing te
a100: 78 74 20 64 65 73 63 72 69 62 65 73 20 6c 6f 77  xt describes low
a110: 2d 6c 65 76 65 6c 20 61 73 70 65 63 74 73 20 6f  -level aspects o
a120: 66 20 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c  f the SQLite fil
a130: 65 0a 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 62  e.format.  The b
a140: 2d 74 72 65 65 20 6d 65 63 68 61 6e 69 73 6d 20  -tree mechanism 
a150: 70 72 6f 76 69 64 65 73 20 61 20 70 6f 77 65 72  provides a power
a160: 66 75 6c 20 61 6e 64 20 65 66 66 69 63 69 65 6e  ful and efficien
a170: 74 20 6d 65 61 6e 73 20 6f 66 0a 61 63 63 65 73  t means of.acces
a180: 73 69 6e 67 20 61 20 6c 61 72 67 65 20 64 61 74  sing a large dat
a190: 61 20 73 65 74 2e 20 20 54 68 69 73 20 73 65 63  a set.  This sec
a1a0: 74 69 6f 6e 20 77 69 6c 6c 20 64 65 73 63 72 69  tion will descri
a1b0: 62 65 20 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c  be how the.low-l
a1c0: 65 76 65 6c 20 62 2d 74 72 65 65 20 6c 61 79 65  evel b-tree laye
a1d0: 72 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  r is used to imp
a1e0: 6c 65 6d 65 6e 74 20 68 69 67 68 65 72 2d 6c 65  lement higher-le
a1f0: 76 65 6c 20 53 51 4c 0a 63 61 70 61 62 69 6c 69  vel SQL.capabili
a200: 74 69 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ties.</p>..<tcl>
a210: 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 6f  hd_fragment reco
a220: 72 64 5f 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72  rd_format {recor
a230: 64 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a  d format}</tcl>.
a240: 3c 68 33 3e 32 2e 31 20 52 65 63 6f 72 64 20 46  <h3>2.1 Record F
a250: 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  ormat</h3>..<p>T
a260: 68 65 20 64 61 74 61 20 66 6f 72 20 61 20 74 61  he data for a ta
a270: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  ble b-tree leaf 
a280: 70 61 67 65 20 61 6e 64 20 74 68 65 20 6b 65 79  page and the key
a290: 0a 6f 66 20 61 6e 20 69 6e 64 65 78 20 62 2d 74  .of an index b-t
a2a0: 72 65 65 20 70 61 67 65 20 77 61 73 20 63 68 61  ree page was cha
a2b0: 72 61 63 74 65 72 69 7a 65 64 20 61 62 6f 76 65  racterized above
a2c0: 0a 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79  .as an arbitrary
a2d0: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
a2e0: 65 73 2e 0a 54 68 65 20 70 72 69 6f 72 20 64 69  es..The prior di
a2f0: 73 63 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e  scussion mention
a300: 65 64 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67  ed one key being
a310: 20 6c 65 73 73 20 74 68 61 6e 20 61 6e 6f 74 68   less than anoth
a320: 65 72 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74 20  er, but.did not 
a330: 64 65 66 69 6e 65 20 77 68 61 74 20 22 6c 65 73  define what "les
a340: 73 20 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20  s than" meant.  
a350: 54 68 65 20 63 75 72 72 65 6e 74 20 73 65 63 74  The current sect
a360: 69 6f 6e 20 77 69 6c 6c 20 61 64 64 72 65 73 73  ion will address
a370: 0a 74 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e 73  .these omissions
a380: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61  .</p>..<p>Payloa
a390: 64 2c 20 65 69 74 68 65 72 20 74 61 62 6c 65 20  d, either table 
a3a0: 62 2d 74 72 65 65 20 64 61 74 61 20 6f 72 20 69  b-tree data or i
a3b0: 6e 64 65 78 20 62 2d 74 72 65 65 20 6b 65 79 73  ndex b-tree keys
a3c0: 2c 20 0a 69 73 20 61 6c 77 61 79 73 20 69 6e 20  , .is always in 
a3d0: 74 68 65 20 22 72 65 63 6f 72 64 20 66 6f 72 6d  the "record form
a3e0: 61 74 22 2e 0a 54 68 65 20 72 65 63 6f 72 64 20  at"..The record 
a3f0: 66 6f 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61  format defines a
a400: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c   sequence of val
a410: 75 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ues correspondin
a420: 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g.to columns in 
a430: 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  a table or index
a440: 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f  .  The record fo
a450: 72 6d 61 74 20 73 70 65 63 69 66 69 65 73 20 74  rmat specifies t
a460: 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c  he number.of col
a470: 75 6d 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79  umns, the dataty
a480: 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  pe of each colum
a490: 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65  n, and the conte
a4a0: 6e 74 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  nt of each colum
a4b0: 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72  n.</p>..<p>The r
a4c0: 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b  ecord format mak
a4d0: 65 73 20 65 78 74 65 6e 73 69 76 65 20 75 73 65  es extensive use
a4e0: 20 6f 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62   of the .[variab
a4f0: 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
a500: 72 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72  r] or [varint].r
a510: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
a520: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
a530: 6e 74 65 67 65 72 73 20 64 65 66 69 6e 65 64 20  ntegers defined 
a540: 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  above.</p>..<tcl
a550: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72  >hd_fragment ser
a560: 69 61 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20  ialtype {serial 
a570: 74 79 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79  type} {serial ty
a580: 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20  pes}</tcl>.<p>A 
a590: 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
a5a0: 61 20 68 65 61 64 65 72 20 61 6e 64 20 61 20 62  a header and a b
a5b0: 6f 64 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64  ody, in that ord
a5c0: 65 72 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64  er.  .^(The head
a5d0: 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  er begins with a
a5e0: 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77   single varint w
a5f0: 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
a600: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
a610: 0a 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65  .of bytes in the
a620: 20 68 65 61 64 65 72 2e 20 20 54 68 65 20 76 61   header.  The va
a630: 72 69 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68  rint value is th
a640: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
a650: 61 64 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e  ader in.bytes in
a660: 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
a670: 20 76 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29   varint itself.)
a680: 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68  ^  ^Following th
a690: 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72  e size varint ar
a6a0: 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64  e.one or more ad
a6b0: 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73  ditional varints
a6c0: 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e  , one per column
a6d0: 2e 20 20 54 68 65 73 65 20 61 64 64 69 74 69 6f  .  These additio
a6e0: 6e 61 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20  nal varints.are 
a6f0: 63 61 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74  called "serial t
a700: 79 70 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64  ype" numbers and
a710: 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64  .determine the d
a720: 61 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20  atatype of each 
a730: 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e  column, accordin
a740: 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  g to the followi
a750: 6e 67 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c  ng chart:</p>..<
a760: 63 65 6e 74 65 72 3e 0a 5e 28 3c 69 3e 53 65 72  center>.^(<i>Ser
a770: 69 61 6c 20 54 79 70 65 20 43 6f 64 65 73 20 4f  ial Type Codes O
a780: 66 20 54 68 65 20 52 65 63 6f 72 64 20 46 6f 72  f The Record For
a790: 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
a7a0: 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
a7b0: 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
a7c0: 3e 53 65 72 69 61 6c 20 54 79 70 65 3c 74 68 3e  >Serial Type<th>
a7d0: 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74 68 3e  Content Size<th>
a7e0: 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64 20  Meaning.<tr><td 
a7f0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a800: 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c  =center>0<td val
a810: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a820: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
a830: 6c 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74 72 3e 3c  left>.NULL.<tr><
a840: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a850: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
a860: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a870: 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69  =center>1<td ali
a880: 67 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69 74 20 74  gn=left>.8-bit t
a890: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
a8a0: 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76  nteger.<tr><td v
a8b0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a8c0: 63 65 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c 69  center>2<td vali
a8d0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a8e0: 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>2<td align=l
a8f0: 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20  eft>.Big-endian 
a900: 31 36 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  16-bit twos-comp
a910: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c  lement integer.<
a920: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
a930: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33  p align=center>3
a940: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
a950: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64  lign=center>3<td
a960: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67   align=left>.Big
a970: 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20 74  -endian 24-bit t
a980: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
a990: 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76  nteger.<tr><td v
a9a0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a9b0: 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69  center>4<td vali
a9c0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a9d0: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
a9e0: 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20  eft>.Big-endian 
a9f0: 33 32 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  32-bit twos-comp
aa00: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c  lement integer.<
aa10: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
aa20: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35  p align=center>5
aa30: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
aa40: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64  lign=center>6<td
aa50: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67   align=left>.Big
aa60: 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20 74  -endian 48-bit t
aa70: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
aa80: 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76  nteger.<tr><td v
aa90: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
aaa0: 63 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c 69  center>6<td vali
aab0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
aac0: 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>8<td align=l
aad0: 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20  eft>.Big-endian 
aae0: 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  64-bit twos-comp
aaf0: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c  lement integer.<
ab00: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
ab10: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37  p align=center>7
ab20: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ab30: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
ab40: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67   align=left>.Big
ab50: 2d 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34  -endian IEEE 754
ab60: 2d 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f  -2008 64-bit flo
ab70: 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62  ating point numb
ab80: 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
ab90: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
aba0: 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
abb0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
abc0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
abd0: 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e  .Integer constan
abe0: 74 20 30 2e 20 20 4f 6e 6c 79 20 61 76 61 69 6c  t 0.  Only avail
abf0: 61 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61 20  able for schema 
ac00: 66 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69 67  format 4 and hig
ac10: 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  her..<tr><td val
ac20: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ac30: 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e  nter>9<td valign
ac40: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ac50: 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>0<td align=lef
ac60: 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73 74  t>.Integer const
ac70: 61 6e 74 20 31 2e 20 20 4f 6e 6c 79 20 61 76 61  ant 1.  Only ava
ac80: 69 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65 6d  ilable for schem
ac90: 61 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20 68  a format 4 and h
aca0: 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76  igher..<tr><td v
acb0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
acc0: 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20  center>10,11.   
acd0: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
ace0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62  align=center>&nb
acf0: 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  sp;<td align=lef
ad00: 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20  t>.<i>Not used. 
ad10: 20 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78   Reserved for ex
ad20: 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72  pansion.</i>.<tr
ad30: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
ad40: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23  align=center>N&#
ad50: 78 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76 65  x2265;12 and eve
ad60: 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  n.    <td valign
ad70: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ad80: 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c  r>(N-12)/2<td al
ad90: 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 42 4c 4f 42  ign=left>.A BLOB
ada0: 20 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f   that is (N-12)/
adb0: 32 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74  2 bytes in lengt
adc0: 68 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  h.<tr><td valign
add0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ade0: 72 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61 6e  r>N&#x2265;13 an
adf0: 64 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76 61  d odd.    <td va
ae00: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
ae10: 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74  enter>(N-13)/2<t
ae20: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20  d align=left>.A 
ae30: 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 64 61  string in the da
ae40: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
ae50: 61 6e 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74  and (N-13)/2 byt
ae60: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 54 68  es in length..Th
ae70: 65 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72  e nul terminator
ae80: 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 3c 2f 74   is omitted..</t
ae90: 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e  able></center>)^
aea0: 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 62  ..<p>Note that b
aeb0: 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 77 61  ecause of the wa
aec0: 79 20 76 61 72 69 6e 74 73 20 61 72 65 20 64 65  y varints are de
aed0: 66 69 6e 65 64 2c 20 74 68 65 20 68 65 61 64 65  fined, the heade
aee0: 72 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e  r size varint.an
aef0: 64 20 73 65 72 69 61 6c 20 74 79 70 65 20 76 61  d serial type va
af00: 72 69 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c  rints will usual
af10: 6c 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20  ly consist of a 
af20: 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
af30: 65 0a 73 65 72 69 61 6c 20 74 79 70 65 20 76 61  e.serial type va
af40: 72 69 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20  rints for large 
af50: 73 74 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42  strings and BLOB
af60: 73 20 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74  s might extend t
af70: 6f 20 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62  o two or three.b
af80: 79 74 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74  yte varints, but
af90: 20 74 68 61 74 20 69 73 20 74 68 65 20 65 78 63   that is the exc
afa0: 65 70 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68  eption rather th
afb0: 61 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68  an the rule. .Th
afc0: 65 20 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20  e varint format 
afd0: 69 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e  is very efficien
afe0: 74 20 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20  t at coding the 
aff0: 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f  record header.</
b000: 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65  p>..<p>The value
b010: 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  s for each colum
b020: 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  n in the record 
b030: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
b040: 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a 5e  ow the header..^
b050: 28 4e 6f 74 65 20 74 68 61 74 20 66 6f 72 20 73  (Note that for s
b060: 65 72 69 61 6c 20 74 79 70 65 73 20 30 2c 20 38  erial types 0, 8
b070: 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20 31 33 2c  , 9, 12, and 13,
b080: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 7a 65   the value is ze
b090: 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65 6e 67  ro bytes in.leng
b0a0: 74 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f 6c 75  th.  If all colu
b0b0: 6d 6e 73 20 61 72 65 20 6f 66 20 74 68 65 73 65  mns are of these
b0c0: 20 74 79 70 65 73 20 74 68 65 6e 20 74 68 65 20   types then the 
b0d0: 62 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f 66 20  body section of 
b0e0: 74 68 65 0a 72 65 63 6f 72 64 20 69 73 20 65 6d  the.record is em
b0f0: 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e  pty.)^</p>..<h3>
b100: 32 2e 32 20 52 65 63 6f 72 64 20 53 6f 72 74 20  2.2 Record Sort 
b110: 4f 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  Order</h3>..<p>T
b120: 68 65 20 6f 72 64 65 72 20 6f 66 20 6b 65 79 73  he order of keys
b130: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74   in an index b-t
b140: 72 65 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ree is determine
b150: 64 20 62 79 20 74 68 65 20 73 6f 72 74 20 6f 72  d by the sort or
b160: 64 65 72 20 6f 66 0a 74 68 65 20 72 65 63 6f 72  der of.the recor
b170: 64 73 20 74 68 61 74 20 74 68 65 20 6b 65 79 73  ds that the keys
b180: 20 72 65 70 72 65 73 65 6e 74 2e 20 20 52 65 63   represent.  Rec
b190: 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e 20 70  ord comparison p
b1a0: 72 6f 67 72 65 73 73 65 73 20 63 6f 6c 75 6d 6e  rogresses column
b1b0: 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6c  .by column.  Col
b1c0: 75 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f 72 64  umns of a record
b1d0: 20 61 72 65 20 65 78 61 6d 69 6e 65 64 20 66 72   are examined fr
b1e0: 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
b1f0: 2e 20 20 54 68 65 0a 66 69 72 73 74 20 70 61 69  .  The.first pai
b200: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
b210: 74 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  t are not equal 
b220: 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 72  determines the r
b230: 65 6c 61 74 69 76 65 20 6f 72 64 65 72 0a 6f 66  elative order.of
b240: 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73   the two records
b250: 2e 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65  .  The sort orde
b260: 72 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20  r of individual 
b270: 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66 6f  columns is as.fo
b280: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  llows:</p>..<ol>
b290: 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76 61 6c 75  .<li>^(NULL valu
b2a0: 65 73 20 28 73 65 72 69 61 6c 20 74 79 70 65 20  es (serial type 
b2b0: 30 29 20 73 6f 72 74 20 66 69 72 73 74 2e 29 5e  0) sort first.)^
b2c0: 0a 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69 63 20 76  .<li>^(Numeric v
b2d0: 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79  alues (serial ty
b2e0: 70 65 73 20 31 20 74 68 72 6f 75 67 68 20 39 29  pes 1 through 9)
b2f0: 20 73 6f 72 74 20 61 66 74 65 72 20 4e 55 4c 4c   sort after NULL
b300: 73 0a 20 20 20 20 20 20 61 6e 64 20 69 6e 20 6e  s.      and in n
b310: 75 6d 65 72 69 63 20 6f 72 64 65 72 2e 29 5e 0a  umeric order.)^.
b320: 3c 6c 69 3e 5e 28 54 65 78 74 20 76 61 6c 75 65  <li>^(Text value
b330: 73 20 28 6f 64 64 20 73 65 72 69 61 6c 20 74 79  s (odd serial ty
b340: 70 65 73 20 31 33 20 61 6e 64 20 6c 61 72 67 65  pes 13 and large
b350: 72 29 20 73 6f 72 74 20 61 66 74 65 72 20 6e 75  r) sort after nu
b360: 6d 65 72 69 63 0a 20 20 20 20 76 61 6c 75 65 73  meric.    values
b370: 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 64 65   in the order de
b380: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
b390: 63 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61 74 69  columns [collati
b3a0: 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 2e 29 5e 0a  ng function].)^.
b3b0: 3c 6c 69 3e 5e 28 42 4c 4f 42 20 76 61 6c 75 65  <li>^(BLOB value
b3c0: 73 20 28 65 76 65 6e 20 73 65 72 69 61 6c 20 74  s (even serial t
b3d0: 79 70 65 73 20 31 32 20 61 6e 64 20 6c 61 72 67  ypes 12 and larg
b3e0: 65 72 29 20 73 6f 72 74 20 6c 61 73 74 20 61 6e  er) sort last an
b3f0: 64 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 0a  d in the order .
b400: 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20 62      determined b
b410: 79 20 6d 65 6d 63 6d 70 28 29 2e 29 5e 0a 3c 2f  y memcmp().)^.</
b420: 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c 6c 61  ol>..<p>A [colla
b430: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 20 66  ting function] f
b440: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
b450: 73 20 6e 65 63 65 73 73 61 72 79 20 69 6e 20 6f  s necessary in o
b460: 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65 0a  rder to compute.
b470: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 65 78  the order of tex
b480: 74 20 66 69 65 6c 64 73 2e 0a 5e 28 53 51 4c 69  t fields..^(SQLi
b490: 74 65 20 64 65 66 69 6e 65 73 20 74 68 72 65 65  te defines three
b4a0: 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74   built-in collat
b4b0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a 29 5e  ing functions:)^
b4c0: 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  .</p>..<blockquo
b4d0: 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  te><table border
b4e0: 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 31  =0 cellspacing=1
b4f0: 30 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0>.<tr><td valig
b500: 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a 20 20 20  n=top>BINARY.   
b510: 20 3c 74 64 3e 20 5e 28 54 68 65 20 62 75 69 6c   <td> ^(The buil
b520: 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c 6c  t-in BINARY coll
b530: 61 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 73  ation compares s
b540: 74 72 69 6e 67 73 20 62 79 74 65 20 62 79 20 62  trings byte by b
b550: 79 74 65 0a 20 20 20 20 20 20 20 20 75 73 69 6e  yte.        usin
b560: 67 20 74 68 65 20 6d 65 6d 63 6d 70 28 29 20 66  g the memcmp() f
b570: 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20  unction.        
b580: 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72  from the standar
b590: 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a 3c  d C library.)^.<
b5a0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b5b0: 70 3e 4e 4f 43 41 53 45 0a 20 20 20 20 3c 74 64  p>NOCASE.    <td
b5c0: 3e 20 5e 28 54 68 65 20 4e 4f 43 41 53 45 20 63  > ^(The NOCASE c
b5d0: 6f 6c 6c 61 74 69 6f 6e 20 69 73 20 6c 69 6b 65  ollation is like
b5e0: 20 42 49 4e 41 52 59 20 65 78 63 65 70 74 20 74   BINARY except t
b5f0: 68 61 74 20 75 70 70 65 72 63 61 73 65 0a 20 20  hat uppercase.  
b600: 20 20 20 20 20 20 41 53 43 49 49 20 63 68 61 72        ASCII char
b610: 61 63 74 65 72 73 20 28 27 41 27 20 74 68 72 6f  acters ('A' thro
b620: 75 67 68 20 27 5a 27 29 0a 20 20 20 20 20 20 20  ugh 'Z').       
b630: 20 61 72 65 20 66 6f 6c 64 65 64 20 69 6e 74 6f   are folded into
b640: 20 74 68 65 69 72 20 6c 6f 77 65 72 63 61 73 65   their lowercase
b650: 20 65 71 75 69 76 61 6c 65 6e 74 73 20 70 72 69   equivalents pri
b660: 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74 68  or to running th
b670: 65 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72  e.        compar
b680: 69 73 6f 6e 2e 20 20 4e 6f 74 65 20 74 68 61 74  ison.  Note that
b690: 20 6f 6e 6c 79 20 41 53 43 49 49 20 63 68 61 72   only ASCII char
b6a0: 61 63 74 65 72 73 20 61 72 65 20 63 61 73 65 2d  acters are case-
b6b0: 66 6f 6c 64 65 64 2e 29 5e 0a 20 20 20 20 20 20  folded.)^.      
b6c0: 20 20 5e 28 4e 4f 43 41 53 45 0a 20 20 20 20 20    ^(NOCASE.     
b6d0: 20 20 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c     does not impl
b6e0: 65 6d 65 6e 74 20 61 20 67 65 6e 65 72 61 6c 20  ement a general 
b6f0: 70 75 72 70 6f 73 65 20 75 6e 69 63 6f 64 65 20  purpose unicode 
b700: 63 61 73 65 6c 65 73 73 20 63 6f 6d 70 61 72 69  caseless compari
b710: 73 6f 6e 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76  son.)^.<tr><td v
b720: 61 6c 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a  align=top>RTRIM.
b730: 20 20 20 20 3c 74 64 3e 20 5e 28 52 54 52 49 4d      <td> ^(RTRIM
b740: 20 69 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20   is like BINARY 
b750: 65 78 63 65 70 74 20 74 68 61 74 20 73 70 61 63  except that spac
b760: 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
b770: 20 74 68 65 20 73 74 72 69 6e 67 0a 20 20 20 20   the string.    
b780: 20 20 20 20 61 72 65 20 65 6c 69 64 65 64 20 70      are elided p
b790: 72 69 6f 72 20 74 6f 20 63 6f 6d 70 61 72 69 73  rior to comparis
b7a0: 6f 6e 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f  on.)^.</table></
b7b0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
b7c0: 5e 41 64 64 69 74 69 6f 6e 61 6c 20 61 70 70 6c  ^Additional appl
b7d0: 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69 63  ication-specific
b7e0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
b7f0: 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 64 64 65  ions can be adde
b800: 64 20 74 6f 0a 53 51 4c 69 74 65 20 75 73 69 6e  d to.SQLite usin
b810: 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 63  g the [sqlite3_c
b820: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
b830: 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f 70  )] interface.</p
b840: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61 75  >..<p>^The defau
b850: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  lt collating fun
b860: 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
b870: 72 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e  rings is BINARY.
b880: 0a 5e 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f  .^Alternative co
b890: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
b8a0: 73 20 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75  s for table colu
b8b0: 6d 6e 73 20 63 61 6e 20 62 65 20 73 70 65 63 69  mns can be speci
b8c0: 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45  fied in the.[CRE
b8d0: 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65  ATE TABLE] state
b8e0: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43  ment using the C
b8f0: 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e  OLLATE clause on
b900: 20 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65 66   the [column def
b910: 69 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20  inition]..^When 
b920: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65  a column is inde
b930: 78 65 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f  xed, the same co
b940: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
b950: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
b960: 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
b970: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
b980: 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ed for the colum
b990: 6e 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20  n in the index, 
b9a0: 62 79 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75  by default,.thou
b9b0: 67 68 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f  gh this can be o
b9c0: 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20  verridden using 
b9d0: 61 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  a COLLATE clause
b9e0: 20 69 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45   in the .[CREATE
b9f0: 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e   INDEX] statemen
ba00: 74 2e 0a 0a 3c 68 33 3e 32 2e 33 20 52 65 70 72  t...<h3>2.3 Repr
ba10: 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51  esentation Of SQ
ba20: 4c 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  L Tables</h3>..<
ba30: 70 3e 20 5e 45 61 63 68 20 6f 72 64 69 6e 61 72  p> ^Each ordinar
ba40: 79 20 53 51 4c 20 74 61 62 6c 65 20 69 6e 20 74  y SQL table in t
ba50: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
ba60: 6d 61 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ma is represente
ba70: 64 20 6f 6e 2d 64 69 73 6b 0a 62 79 20 61 20 74  d on-disk.by a t
ba80: 61 62 6c 65 20 62 2d 74 72 65 65 2e 20 20 5e 45  able b-tree.  ^E
ba90: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ach entry in the
baa0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f   table b-tree co
bab0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 72  rresponds to a r
bac0: 6f 77 0a 6f 66 20 74 68 65 20 53 51 4c 20 74 61  ow.of the SQL ta
bad0: 62 6c 65 2e 20 20 54 5e 68 65 20 5b 72 6f 77 69  ble.  T^he [rowi
bae0: 64 5d 20 6f 66 20 74 68 65 20 53 51 4c 20 74 61  d] of the SQL ta
baf0: 62 6c 65 20 69 73 20 74 68 65 20 36 34 2d 62 69  ble is the 64-bi
bb00: 74 20 73 69 67 6e 65 64 0a 69 6e 74 65 67 65 72  t signed.integer
bb10: 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20 65 6e   key for each en
bb20: 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65  try in the table
bb30: 20 62 2d 74 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70   b-tree.</p>..<p
bb40: 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  > ^The content o
bb50: 66 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  f each SQL table
bb60: 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
bb70: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
bb80: 69 6c 65 20 62 79 0a 66 69 72 73 74 20 63 6f 6d  ile by.first com
bb90: 62 69 6e 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bining the value
bba0: 73 20 69 6e 20 74 68 65 20 76 61 72 69 6f 75 73  s in the various
bbb0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 74 6f 20 61 20   columns into a 
bbc0: 62 79 74 65 20 61 72 72 61 79 0a 69 6e 20 74 68  byte array.in th
bbd0: 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 2c  e record format,
bbe0: 20 74 68 65 6e 20 73 74 6f 72 69 6e 67 20 74 68   then storing th
bbf0: 61 74 20 62 79 74 65 20 61 72 72 61 79 20 61 73  at byte array as
bc00: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e 0a   the payload in.
bc10: 61 6e 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  an entry in the 
bc20: 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 20 20 5e  table b-tree.  ^
bc30: 54 68 65 20 6f 72 64 65 72 20 6f 66 20 76 61 6c  The order of val
bc40: 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
bc50: 64 20 69 73 0a 74 68 65 20 73 61 6d 65 20 61 73  d is.the same as
bc60: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
bc70: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 53 51 4c  lumns in the SQL
bc80: 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
bc90: 6e 2e 0a 5e 57 68 65 6e 20 61 6e 20 53 51 4c 20  n..^When an SQL 
bca0: 74 61 62 6c 65 20 74 68 61 74 20 69 6e 63 6c 75  table that inclu
bcb0: 64 65 73 20 61 6e 0a 5b 49 4e 54 45 47 45 52 20  des an.[INTEGER 
bcc0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c  PRIMARY KEY] col
bcd0: 75 6d 6e 20 28 77 68 69 63 68 20 61 6c 69 61 73  umn (which alias
bce0: 65 73 20 74 68 65 20 5b 72 6f 77 69 64 5d 29 20  es the [rowid]) 
bcf0: 74 68 65 6e 20 74 68 61 74 0a 63 6f 6c 75 6d 6e  then that.column
bd00: 20 61 70 70 65 61 72 73 20 69 6e 20 74 68 65 20   appears in the 
bd10: 72 65 63 6f 72 64 20 61 73 20 61 20 4e 55 4c 4c  record as a NULL
bd20: 20 76 61 6c 75 65 2e 20 20 5e 53 51 4c 69 74 65   value.  ^SQLite
bd30: 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 75 73 65   will always use
bd40: 0a 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65  .the table b-tre
bd50: 65 20 6b 65 79 20 72 61 74 68 65 72 20 74 68 61  e key rather tha
bd60: 6e 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75 65  n the NULL value
bd70: 20 77 68 65 6e 20 72 65 66 65 72 65 6e 63 69 6e   when referencin
bd80: 67 20 74 68 65 0a 5b 49 4e 54 45 47 45 52 20 50  g the.[INTEGER P
bd90: 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75  RIMARY KEY] colu
bda0: 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66  mn.</p>..<p> ^If
bdb0: 20 74 68 65 20 5b 61 66 66 69 6e 69 74 79 5d 20   the [affinity] 
bdc0: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 52  of a column is R
bdd0: 45 41 4c 20 61 6e 64 20 74 68 61 74 20 63 6f 6c  EAL and that col
bde0: 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 0a 76  umn contains a.v
bdf0: 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
be00: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
be10: 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
be20: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
be30: 74 69 6f 6e 0a 28 69 66 20 74 68 65 20 76 61 6c  tion.(if the val
be40: 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 66  ue contains no f
be50: 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 20 61  ractional part a
be60: 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f 20 6c 61  nd is not too la
be70: 72 67 65 20 74 6f 20 62 65 0a 72 65 70 72 65 73  rge to be.repres
be80: 65 6e 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65  ented as an inte
be90: 67 65 72 29 20 74 68 65 6e 20 74 68 65 20 63 6f  ger) then the co
bea0: 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73 74 6f 72  lumn may be stor
beb0: 65 64 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ed in the record
bec0: 0a 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  .as an integer. 
bed0: 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 63 6f   ^SQLite will co
bee0: 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75 65 20  nvert the value 
bef0: 62 61 63 6b 20 74 6f 20 66 6c 6f 61 74 69 6e 67  back to floating
bf00: 0a 70 6f 69 6e 74 20 77 68 65 6e 20 65 78 74 72  .point when extr
bf10: 61 63 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 74  acting it from t
bf20: 68 65 20 72 65 63 6f 72 64 2e 3c 2f 70 3e 0a 0a  he record.</p>..
bf30: 3c 68 33 3e 32 2e 34 20 52 65 70 72 65 73 65 6e  <h3>2.4 Represen
bf40: 74 61 74 69 6f 6e 20 6f 66 20 57 49 54 48 4f 55  tation of WITHOU
bf50: 54 20 52 4f 57 49 44 20 54 61 62 6c 65 73 3c 2f  T ROWID Tables</
bf60: 68 33 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 53  h3>..<p>^If an S
bf70: 51 4c 20 74 61 62 6c 65 20 69 73 20 63 72 65 61  QL table is crea
bf80: 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 22 57  ted using the "W
bf90: 49 54 48 4f 55 54 20 52 4f 57 49 44 22 20 63 6c  ITHOUT ROWID" cl
bfa0: 61 75 73 65 20 61 74 20 74 68 65 0a 65 6e 64 20  ause at the.end 
bfb0: 6f 66 20 69 74 73 20 43 52 45 41 54 45 20 54 41  of its CREATE TA
bfc0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  BLE statement, t
bfd0: 68 65 6e 20 74 68 61 74 20 74 61 62 6c 65 20 69  hen that table i
bfe0: 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  s a [WITHOUT ROW
bff0: 49 44 5d 0a 74 61 62 6c 65 20 61 6e 64 20 75 73  ID].table and us
c000: 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 6f  es a different o
c010: 6e 2d 64 69 73 6b 20 72 65 70 72 65 73 65 6e 74  n-disk represent
c020: 61 74 69 6f 6e 2e 20 20 5e 41 20 57 49 54 48 4f  ation.  ^A WITHO
c030: 55 54 20 52 4f 57 49 44 0a 74 61 62 6c 65 20 75  UT ROWID.table u
c040: 73 65 73 20 61 6e 20 69 6e 64 65 78 20 62 2d 74  ses an index b-t
c050: 72 65 65 20 72 61 74 68 65 72 20 74 68 61 6e 20  ree rather than 
c060: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 66  a table b-tree f
c070: 6f 72 20 73 74 6f 72 61 67 65 2e 0a 5e 54 68 65  or storage..^The
c080: 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20 65 6e   key for each en
c090: 74 72 79 20 69 6e 20 74 68 65 20 57 49 54 48 4f  try in the WITHO
c0a0: 55 54 20 52 4f 57 49 44 20 62 2d 74 72 65 65 20  UT ROWID b-tree 
c0b0: 69 73 20 61 20 72 65 63 6f 72 64 20 63 6f 6d 70  is a record comp
c0c0: 6f 73 65 64 0a 6f 66 20 74 68 65 20 63 6f 6c 75  osed.of the colu
c0d0: 6d 6e 73 20 6f 66 20 74 68 65 20 50 52 49 4d 41  mns of the PRIMA
c0e0: 52 59 20 4b 45 59 20 66 6f 6c 6c 6f 77 65 64 20  RY KEY followed 
c0f0: 62 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67  by all remaining
c100: 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68 65 20   columns of.the 
c110: 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 70 72 69  table.  ^The pri
c120: 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  mary key columns
c130: 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6f   appear in the o
c140: 72 64 65 72 20 74 68 65 79 20 74 68 65 79 20 77  rder they they w
c150: 65 72 65 0a 64 65 63 6c 61 72 65 64 20 69 6e 20  ere.declared in 
c160: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
c170: 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 72  clause and the r
c180: 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73  emaining columns
c190: 20 61 70 70 65 61 72 20 69 6e 0a 74 68 65 20 6f   appear in.the o
c1a0: 72 64 65 72 20 74 68 65 79 20 6f 63 63 75 72 20  rder they occur 
c1b0: 69 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41  in the CREATE TA
c1c0: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  BLE statement...
c1d0: 3c 70 3e 5e 48 65 6e 63 65 2c 20 74 68 65 20 63  <p>^Hence, the c
c1e0: 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20  ontent encoding 
c1f0: 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f  for a WITHOUT RO
c200: 57 49 44 20 74 61 62 6c 65 20 69 73 20 74 68 65  WID table is the
c210: 20 73 61 6d 65 0a 61 73 20 74 68 65 20 63 6f 6e   same.as the con
c220: 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f  tent encoding fo
c230: 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f  r an ordinary ro
c240: 77 69 64 20 74 61 62 6c 65 2c 20 65 78 63 65 70  wid table, excep
c250: 74 20 74 68 61 74 20 74 68 65 0a 6f 72 64 65 72  t that the.order
c260: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
c270: 69 73 20 72 65 61 72 72 61 6e 67 65 64 20 73 6f  is rearranged so
c280: 20 74 68 61 74 20 50 52 49 4d 41 52 59 20 4b 45   that PRIMARY KE
c290: 59 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65 0a 66  Y columns come.f
c2a0: 69 72 73 74 2c 20 61 6e 64 20 74 68 65 20 63 6f  irst, and the co
c2b0: 6e 74 65 6e 74 20 69 73 20 75 73 65 64 20 61 73  ntent is used as
c2c0: 20 74 68 65 20 6b 65 79 20 69 6e 20 61 6e 20 69   the key in an i
c2d0: 6e 64 65 78 20 62 2d 74 72 65 65 20 72 61 74 68  ndex b-tree rath
c2e0: 65 72 0a 74 68 61 6e 20 61 73 20 74 68 65 20 64  er.than as the d
c2f0: 61 74 61 20 69 6e 20 61 20 74 61 62 6c 65 20 62  ata in a table b
c300: 2d 74 72 65 65 2e 0a 5e 54 68 65 20 73 70 65 63  -tree..^The spec
c310: 69 61 6c 20 65 6e 63 6f 64 69 6e 67 20 72 75 6c  ial encoding rul
c320: 65 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73 20 77  es for columns w
c330: 69 74 68 20 52 45 41 4c 20 61 66 66 69 6e 69 74  ith REAL affinit
c340: 79 0a 61 70 70 6c 79 20 74 6f 20 57 49 54 48 4f  y.apply to WITHO
c350: 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20  UT ROWID tables 
c360: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 79  the same as they
c370: 20 64 6f 20 77 69 74 68 20 72 6f 77 69 64 20 74   do with rowid t
c380: 61 62 6c 65 73 2e 0a 0a 3c 68 33 3e 32 2e 35 20  ables...<h3>2.5 
c390: 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f  Representation O
c3a0: 66 20 53 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68  f SQL Indices</h
c3b0: 33 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 53 51 4c  3>..<p>^Each SQL
c3c0: 20 69 6e 64 65 78 2c 20 77 68 65 74 68 65 72 20   index, whether 
c3d0: 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61  explicitly decla
c3e0: 72 65 64 20 76 69 61 20 61 20 5b 43 52 45 41 54  red via a [CREAT
c3f0: 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
c400: 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62 79  nt.or implied by
c410: 20 61 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49   a UNIQUE or PRI
c420: 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
c430: 69 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e 64 73  int, corresponds
c440: 20 74 6f 20 61 6e 20 0a 69 6e 64 65 78 20 62 2d   to an .index b-
c450: 74 72 65 65 20 69 6e 20 74 68 65 20 64 61 74 61  tree in the data
c460: 62 61 73 65 20 66 69 6c 65 2e 0a 5e 45 61 63 68  base file..^Each
c470: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 69 6e   entry in the in
c480: 64 65 78 20 62 2d 74 72 65 65 20 63 6f 72 72 65  dex b-tree corre
c490: 73 70 6f 6e 64 73 20 74 6f 20 61 20 73 69 6e 67  sponds to a sing
c4a0: 6c 65 20 72 6f 77 20 69 6e 20 74 68 65 20 0a 61  le row in the .a
c4b0: 73 73 6f 63 69 61 74 65 64 20 53 51 4c 20 74 61  ssociated SQL ta
c4c0: 62 6c 65 2e 0a 5e 54 68 65 20 6b 65 79 20 74 6f  ble..^The key to
c4d0: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
c4e0: 20 69 73 0a 61 20 72 65 63 6f 72 64 20 63 6f 6d   is.a record com
c4f0: 70 6f 73 65 64 20 6f 66 20 74 68 65 20 63 6f 6c  posed of the col
c500: 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 62 65  umns that are be
c510: 69 6e 67 20 69 6e 64 65 78 65 64 20 66 6f 6c 6c  ing indexed foll
c520: 6f 77 65 64 20 62 79 20 74 68 65 0a 6b 65 79 20  owed by the.key 
c530: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
c540: 64 69 6e 67 20 74 61 62 6c 65 20 72 6f 77 2e 20  ding table row. 
c550: 20 46 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61   For ordinary ta
c560: 62 6c 65 73 2c 20 74 68 65 20 72 6f 77 20 6b 65  bles, the row ke
c570: 79 20 69 73 0a 74 68 65 20 5b 72 6f 77 69 64 5d  y is.the [rowid]
c580: 2c 20 61 6e 64 20 66 6f 72 20 5b 57 49 54 48 4f  , and for [WITHO
c590: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
c5a0: 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69 73 20   the row key is 
c5b0: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
c5c0: 0a 42 65 63 61 75 73 65 20 65 76 65 72 79 20 72  .Because every r
c5d0: 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ow in the table 
c5e0: 68 61 73 20 61 20 75 6e 69 71 75 65 20 72 6f 77  has a unique row
c5f0: 20 6b 65 79 2c 0a 61 6c 6c 20 6b 65 79 73 20 69   key,.all keys i
c600: 6e 20 61 6e 20 69 6e 64 65 78 20 61 72 65 20 75  n an index are u
c610: 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  nique.</p>..<p>^
c620: 49 6e 20 61 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  In a normal inde
c630: 78 2c 20 74 68 65 72 65 20 69 73 20 61 20 6f 6e  x, there is a on
c640: 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67  e-to-one mapping
c650: 20 62 65 74 77 65 65 6e 20 72 6f 77 73 20 69 6e   between rows in
c660: 20 61 20 0a 74 61 62 6c 65 20 61 6e 64 20 65 6e   a .table and en
c670: 74 72 69 65 73 20 69 6e 20 65 61 63 68 20 69 6e  tries in each in
c680: 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
c690: 69 74 68 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  ith that table..
c6a0: 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 61 20 5b  ^However, in a [
c6b0: 70 61 72 74 69 61 6c 20 69 6e 64 65 78 5d 2c 20  partial index], 
c6c0: 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65  the index b-tree
c6d0: 20 6f 6e 6c 79 20 63 6f 6e 74 61 69 6e 73 20 65   only contains e
c6e0: 6e 74 72 69 65 73 0a 63 6f 72 72 65 73 70 6f 6e  ntries.correspon
c6f0: 64 69 6e 67 20 74 6f 20 74 61 62 6c 65 20 72 6f  ding to table ro
c700: 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
c710: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78   WHERE clause ex
c720: 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a  pression on the.
c730: 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
c740: 74 65 6d 65 6e 74 20 69 73 20 74 72 75 65 2e 0a  tement is true..
c750: 5e 43 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 72  ^Corresponding r
c760: 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
c770: 20 61 6e 64 20 74 61 62 6c 65 20 62 2d 74 72 65   and table b-tre
c780: 65 73 20 73 68 61 72 65 20 74 68 65 20 73 61 6d  es share the sam
c790: 65 20 72 6f 77 69 64 0a 6f 72 20 70 72 69 6d 61  e rowid.or prima
c7a0: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 20 61 6e  ry key values an
c7b0: 64 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61  d contain the sa
c7c0: 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c  me value for all
c7d0: 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
c7e0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 32 2e 35 2e 31  .</p>..<h4>2.5.1
c7f0: 20 53 75 70 70 72 65 73 73 69 6f 6e 20 6f 66 20   Suppression of 
c800: 72 65 64 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e  redundant column
c810: 73 20 69 6e 20 57 49 54 48 4f 55 54 20 52 4f 57  s in WITHOUT ROW
c820: 49 44 20 73 65 63 6f 6e 64 61 72 79 20 69 6e 64  ID secondary ind
c830: 65 78 65 64 0a 3c 2f 68 34 3e 0a 0a 3c 70 3e 20  exed.</h4>..<p> 
c840: 5e 49 6e 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20  ^In an index on 
c850: 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  a WITHOUT ROWID 
c860: 74 61 62 6c 65 2c 20 69 66 20 6f 6e 65 20 6f 72  table, if one or
c870: 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 63 6f 6c   more of the col
c880: 75 6d 6e 73 0a 6f 66 20 74 61 62 6c 65 20 50 52  umns.of table PR
c890: 49 4d 41 52 59 20 4b 45 59 20 61 72 65 20 61 6c  IMARY KEY are al
c8a0: 73 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  so columns of th
c8b0: 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68  e index, then th
c8c0: 65 0a 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e.indexed column
c8d0: 20 69 73 20 6e 6f 74 20 72 65 70 65 61 74 65 64   is not repeated
c8e0: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2d 6b 65   in the table-ke
c8f0: 79 20 73 75 66 66 69 78 20 6f 6e 20 74 68 65 20  y suffix on the 
c900: 65 6e 64 20 6f 66 0a 74 68 65 20 69 6e 64 65 78  end of.the index
c910: 20 72 65 63 6f 72 64 2e 20 20 5e 28 41 73 20 61   record.  ^(As a
c920: 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73 69  n example, consi
c930: 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  der the followin
c940: 67 20 53 51 4c 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  g SQL:..<blockqu
c950: 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
c960: 20 54 41 42 4c 45 20 65 78 32 35 28 61 2c 62 2c   TABLE ex25(a,b,
c970: 63 2c 64 2c 65 2c 50 52 49 4d 41 52 59 20 4b 45  c,d,e,PRIMARY KE
c980: 59 28 64 2c 63 2c 61 29 29 20 57 49 54 48 4f 55  Y(d,c,a)) WITHOU
c990: 54 20 72 6f 77 69 64 3b 0a 43 52 45 41 54 45 20  T rowid;.CREATE 
c9a0: 49 4e 44 45 58 20 65 78 32 35 63 65 20 4f 4e 20  INDEX ex25ce ON 
c9b0: 65 78 32 35 28 63 2c 65 29 3b 0a 43 52 45 41 54  ex25(c,e);.CREAT
c9c0: 45 20 49 4e 44 45 58 20 65 78 32 35 61 63 64 65  E INDEX ex25acde
c9d0: 20 4f 4e 20 65 78 32 35 28 61 2c 63 2c 64 2c 65   ON ex25(a,c,d,e
c9e0: 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
c9f0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 61 63 68 20  quote>..<p>Each 
ca00: 72 6f 77 20 69 6e 20 74 68 65 20 65 78 32 35 63  row in the ex25c
ca10: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 65  e index of the e
ca20: 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 63 6f 6e  xample above con
ca30: 73 69 73 74 73 20 6f 66 20 61 20 72 65 63 6f 72  sists of a recor
ca40: 64 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  d.containing the
ca50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6c 75 6d   following colum
ca60: 6e 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20  ns: c, e, d, a. 
ca70: 20 54 68 65 20 66 69 72 73 74 20 74 77 6f 20 63   The first two c
ca80: 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63  olumns are.the c
ca90: 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64  olumns being ind
caa0: 65 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20  exed, c and e.  
cab0: 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f  The remaining co
cac0: 6c 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72  lumns are the pr
cad0: 69 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65  imary.key of the
cae0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
caf0: 61 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61  able row.  Norma
cb00: 6c 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79  lly, the primary
cb10: 20 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f   key would be.co
cb20: 6c 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20  lumns d, c, and 
cb30: 61 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 63  a, but because c
cb40: 6f 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20  olumn c already 
cb50: 61 70 70 65 61 72 73 20 65 61 72 6c 69 65 72 20  appears earlier 
cb60: 69 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74  in the.index, it
cb70: 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
cb80: 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e   the key suffix.
cb90: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20  )^</p>..<p>^(In 
cba0: 74 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65  the extreme case
cbb0: 20 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d   where the colum
cbc0: 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  ns being indexed
cbd0: 20 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d   cover all colum
cbe0: 6e 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52  ns.of the PRIMAR
cbf0: 59 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78  Y KEY, the index
cc00: 20 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66   will consist of
cc10: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e   only the column
cc20: 73 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e  s being.indexed.
cc30: 20 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65    The ex25acde e
cc40: 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d  xample above dem
cc50: 6f 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 29  onstrates this.)
cc60: 5e 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69  ^  ^Each entry i
cc70: 6e 0a 74 68 65 20 65 78 32 35 61 63 64 65 20 69  n.the ex25acde i
cc80: 6e 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66  ndex consists of
cc90: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e   only the column
cca0: 73 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65  s a, c, d, and e
ccb0: 2c 20 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e  , in that.order.
ccc0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73  </p>..<p> ^The s
ccd0: 75 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65  uppression of re
cce0: 64 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20  dundant columns 
ccf0: 69 6e 20 74 68 65 20 6b 65 79 20 73 75 66 66 69  in the key suffi
cd00: 78 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e  x of an index.en
cd10: 74 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20  try only occurs 
cd20: 69 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  in WITHOUT ROWID
cd30: 20 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e   tables.  ^In an
cd40: 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20   ordinary rowid 
cd50: 74 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78  table,.the index
cd60: 20 65 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e   entry always en
cd70: 64 73 20 77 69 74 68 20 74 68 65 20 72 6f 77 69  ds with the rowi
cd80: 64 20 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49  d even if the [I
cd90: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
cda0: 45 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e  EY].column is on
cdb0: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  e of the columns
cdc0: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c   being indexed.<
cdd0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
cde0: 67 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73  gment sqlite_mas
cdf0: 74 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  ter {sqlite_mast
ce00: 65 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74  er} {sqlite_mast
ce10: 65 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a  er table}</tcl>.
ce20: 3c 68 33 3e 32 2e 36 20 53 74 6f 72 61 67 65 20  <h3>2.6 Storage 
ce30: 4f 66 20 54 68 65 20 53 51 4c 20 44 61 74 61 62  Of The SQL Datab
ce40: 61 73 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a  ase Schema</h3>.
ce50: 0a 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61  .<p>^Page 1 of a
ce60: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
ce70: 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  s the root page 
ce80: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
ce90: 65 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73  e that.holds a s
cea0: 70 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d  pecial table nam
ceb0: 65 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65  ed "sqlite_maste
cec0: 72 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74  r" (or "sqlite_t
ced0: 65 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74  emp_master" in.t
cee0: 68 65 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d  he case of a TEM
cef0: 50 20 64 61 74 61 62 61 73 65 29 20 77 68 69 63  P database) whic
cf00: 68 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d  h stores the com
cf10: 70 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20 73  plete.database s
cf20: 63 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74  chema.  ^(The st
cf30: 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73  ructure of the s
cf40: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
cf50: 6c 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68  le is as.if it h
cf60: 61 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20  ad been created 
cf70: 75 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77  using the follow
cf80: 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62  ing SQL:</p>..<b
cf90: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
cfa0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
cfb0: 69 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79  ite_master(.  ty
cfc0: 70 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20  pe text,.  name 
cfd0: 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65  text,.  tbl_name
cfe0: 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67   text,.  rootpag
cff0: 65 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c  e integer,.  sql
d000: 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c   text.);.</pre><
d010: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
d020: 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d  <p>^The sqlite_m
d030: 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74  aster table cont
d040: 61 69 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72  ains one row for
d050: 20 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64   each table, ind
d060: 65 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72  ex, view,.and tr
d070: 69 67 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76  igger (collectiv
d080: 65 6c 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69  ely "objects") i
d090: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
d0a0: 63 68 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68  chema, except th
d0b0: 65 72 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20  ere.is no entry 
d0c0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  for the sqlite_m
d0d0: 61 73 74 65 72 20 74 61 62 6c 65 20 69 74 73 65  aster table itse
d0e0: 6c 66 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65  lf.  ^The sqlite
d0f0: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f  _master table.co
d100: 6e 74 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66  ntains entries f
d110: 6f 72 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68  or [internal sch
d120: 65 6d 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20  ema objects] in 
d130: 61 64 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c  addition to appl
d140: 69 63 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f  ication-.and pro
d150: 67 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20  grammer-defined 
d160: 6f 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28  objects....<p>^(
d170: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
d180: 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69  r.type column wi
d190: 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65  ll be one.of the
d1a0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20   following text 
d1b0: 73 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65  strings:  'table
d1c0: 27 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65  ', 'index', 'vie
d1d0: 77 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27  w', or 'trigger'
d1e0: 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68  .according to th
d1f0: 65 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74  e type of object
d200: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27   defined.  The '
d210: 74 61 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73  table' string is
d220: 20 75 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f   used.for both o
d230: 72 64 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72  rdinary and [vir
d240: 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c  tual tables].)^<
d250: 2f 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65 20 73  /p>..</p>^(The s
d260: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d  qlite_master.nam
d270: 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f  e column will ho
d280: 6c 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ld the name of t
d290: 68 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b  he object.)^.^([
d2a0: 55 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49  UNIQUE] and [PRI
d2b0: 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72  MARY KEY] constr
d2c0: 61 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65 73 20  aints on tables 
d2d0: 63 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20  cause SQLite to 
d2e0: 63 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c  create.[internal
d2f0: 20 69 6e 64 65 78 65 73 5d 20 77 69 74 68 20 6e   indexes] with n
d300: 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d  ames of the form
d310: 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   "sqlite_autoind
d320: 65 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72  ex_TABLE_N".wher
d330: 65 20 54 41 42 4c 45 20 69 73 20 72 65 70 6c 61  e TABLE is repla
d340: 63 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20  ced by the name 
d350: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
d360: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63  t contains the.c
d370: 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20  onstraint and N 
d380: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
d390: 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 20 61  ginning with 1 a
d3a0: 6e 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79  nd increasing by
d3b0: 20 6f 6e 65 0a 77 69 74 68 20 65 61 63 68 20 63   one.with each c
d3c0: 6f 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 20 69  onstraint seen i
d3d0: 6e 20 74 68 65 20 74 61 62 6c 65 20 64 65 66 69  n the table defi
d3e0: 6e 69 74 69 6f 6e 2e 29 5e 0a 5e 28 49 6e 20 61  nition.)^.^(In a
d3f0: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
d400: 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73   table, there is
d410: 20 6e 6f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   no sqlite_maste
d420: 72 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65 0a  r entry for the.
d430: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 75 74  PRIMARY KEY, but
d440: 20 74 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74   the "sqlite_aut
d450: 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20  oindex_TABLE_N" 
d460: 6e 61 6d 65 20 69 73 20 73 65 74 20 61 73 69 64  name is set asid
d470: 65 0a 66 6f 72 20 74 68 65 20 50 52 49 4d 41 52  e.for the PRIMAR
d480: 59 20 4b 45 59 20 61 73 20 69 66 20 74 68 65 20  Y KEY as if the 
d490: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e  sqlite_master en
d4a0: 74 72 79 20 64 69 64 20 65 78 69 73 74 2e 20 20  try did exist.  
d4b0: 54 68 69 73 0a 77 69 6c 6c 20 61 66 66 65 63 74  This.will affect
d4c0: 20 74 68 65 20 6e 75 6d 62 65 72 69 6e 67 20 6f   the numbering o
d4d0: 66 20 73 75 62 73 65 71 75 65 6e 74 20 55 4e 49  f subsequent UNI
d4e0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  QUE constraints.
d4f0: 29 5e 0a 5e 54 68 65 20 22 73 71 6c 69 74 65 5f  )^.^The "sqlite_
d500: 61 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f  autoindex_TABLE_
d510: 4e 22 20 6e 61 6d 65 20 69 73 20 6e 65 76 65 72  N" name is never
d520: 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61   allocated for a
d530: 6e 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n.[INTEGER PRIMA
d540: 52 59 20 4b 45 59 5d 2c 20 65 69 74 68 65 72 20  RY KEY], either 
d550: 69 6e 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20  in rowid tables 
d560: 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  or WITHOUT ROWID
d570: 20 74 61 62 6c 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c   tables..</p>..<
d580: 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  p>The sqlite_mas
d590: 74 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  ter.tbl_name col
d5a0: 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61  umn holds the na
d5b0: 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72  me of a table or
d5c0: 20 76 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f   view.that the o
d5d0: 62 6a 65 63 74 20 69 73 20 61 73 73 6f 63 69 61  bject is associa
d5e0: 74 65 64 20 77 69 74 68 2e 20 20 5e 46 6f 72 20  ted with.  ^For 
d5f0: 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c  a table or view,
d600: 20 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f   the.tbl_name co
d610: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f  lumn is a copy o
d620: 66 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d  f the name colum
d630: 6e 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65  n.  ^For an inde
d640: 78 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a  x, the tbl_name.
d650: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
d660: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
d670: 20 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f 72 20   indexed.  ^For 
d680: 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 74  a trigger, the t
d690: 62 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73  bl_name.column s
d6a0: 74 6f 72 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  tores the name o
d6b0: 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
d6c0: 69 65 77 20 74 68 61 74 20 63 61 75 73 65 73 20  iew that causes 
d6d0: 74 68 65 20 74 72 69 67 67 65 72 20 0a 74 6f 20  the trigger .to 
d6e0: 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  fire.</p>..<p>^(
d6f0: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
d700: 72 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d  r.rootpage colum
d710: 6e 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  n stores the pag
d720: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
d730: 72 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65  root.b-tree page
d740: 20 66 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20   for tables and 
d750: 69 6e 64 65 78 65 73 2e 29 5e 20 20 5e 46 6f 72  indexes.)^  ^For
d760: 20 72 6f 77 73 20 74 68 61 74 20 64 65 66 69 6e   rows that defin
d770: 65 20 76 69 65 77 73 2c 20 74 72 69 67 67 65 72  e views, trigger
d780: 73 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c 20 74  s,.and virtual t
d790: 61 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74 70  ables, the rootp
d7a0: 61 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20  age column is 0 
d7b0: 6f 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70  or NULL.</p>..<p
d7c0: 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  >^(The sqlite_ma
d7d0: 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20  ster.sql column 
d7e0: 73 74 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20  stores SQL text 
d7f0: 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
d800: 68 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73  he.object.  This
d810: 20 53 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b   SQL text is a [
d820: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b  CREATE TABLE], [
d830: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
d840: 41 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49  ABLE],.[CREATE I
d850: 4e 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56  NDEX],.[CREATE V
d860: 49 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45  IEW], or [CREATE
d870: 20 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d   TRIGGER] statem
d880: 65 6e 74 20 74 68 61 74 20 69 66 20 65 76 61 6c  ent that if eval
d890: 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68  uated against.th
d8a0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
d8b0: 77 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d  when it is the m
d8c0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20  ain database of 
d8d0: 61 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  a [database conn
d8e0: 65 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65  ection].would re
d8f0: 63 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65  created the obje
d900: 63 74 2e 29 5e 20 20 54 68 65 20 74 65 78 74 20  ct.)^  The text 
d910: 69 73 20 75 73 75 61 6c 6c 79 20 61 20 63 6f 70  is usually a cop
d920: 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  y of the origina
d930: 6c 0a 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  l.statement used
d940: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 6f   to create the o
d950: 62 6a 65 63 74 20 62 75 74 20 77 69 74 68 20 6e  bject but with n
d960: 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 73 20 61 70  ormalizations ap
d970: 70 6c 69 65 64 20 73 6f 0a 74 68 61 74 20 74 68  plied so.that th
d980: 65 20 74 65 78 74 20 63 6f 6e 66 6f 72 6d 73 20  e text conforms 
d990: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
d9a0: 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c   rules:..<ul>.<l
d9b0: 69 3e 5e 54 68 65 20 43 52 45 41 54 45 2c 20 54  i>^The CREATE, T
d9c0: 41 42 4c 45 2c 20 56 49 45 57 2c 20 54 52 49 47  ABLE, VIEW, TRIG
d9d0: 47 45 52 2c 20 61 6e 64 20 49 4e 44 45 58 20 6b  GER, and INDEX k
d9e0: 65 79 77 6f 72 64 73 20 61 74 20 74 68 65 20 62  eywords at the b
d9f0: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
da00: 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20 63 6f  statement are co
da10: 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c 20 75  nverted to all u
da20: 70 70 65 72 20 63 61 73 65 20 6c 65 74 74 65 72  pper case letter
da30: 73 2e 0a 3c 6c 69 3e 5e 54 68 65 20 54 45 4d 50  s..<li>^The TEMP
da40: 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20 6b 65   or TEMPORARY ke
da50: 79 77 6f 72 64 20 69 73 20 72 65 6d 6f 76 65 64  yword is removed
da60: 20 69 66 20 69 74 20 6f 63 63 75 72 73 20 61 66   if it occurs af
da70: 74 65 72 20 74 68 65 20 0a 69 6e 69 74 69 61 6c  ter the .initial
da80: 20 43 52 45 41 54 45 20 6b 65 79 77 6f 72 64 2e   CREATE keyword.
da90: 0a 3c 6c 69 3e 5e 41 6e 79 20 64 61 74 61 62 61  .<li>^Any databa
daa0: 73 65 20 6e 61 6d 65 20 71 75 61 6c 69 66 69 65  se name qualifie
dab0: 72 20 74 68 61 74 20 6f 63 63 75 72 73 20 70 72  r that occurs pr
dac0: 69 6f 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ior to the name 
dad0: 6f 66 20 74 68 65 0a 6f 62 6a 65 63 74 20 62 65  of the.object be
dae0: 69 6e 67 20 63 72 65 61 74 65 64 20 69 73 20 72  ing created is r
daf0: 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61  emoved..<li>^Lea
db00: 64 69 6e 67 20 73 70 61 63 65 73 20 61 72 65 20  ding spaces are 
db10: 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c  removed..<li>^Al
db20: 6c 20 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77 69  l spaces followi
db30: 6e 67 20 74 68 65 20 66 69 72 73 74 20 74 77 6f  ng the first two
db40: 20 6b 65 79 77 6f 72 64 73 20 61 72 65 20 63 6f   keywords are co
db50: 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73  nverted into a s
db60: 69 6e 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f 75  ingle.space..</u
db70: 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 74 65 78  l>..<p>^(The tex
db80: 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  t in the sqlite_
db90: 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d  master.sql colum
dba0: 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74  n is a copy of t
dbb0: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 43 52 45 41  he original.CREA
dbc0: 54 45 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78  TE statement tex
dbd0: 74 20 74 68 61 74 20 63 72 65 61 74 65 64 20 74  t that created t
dbe0: 68 65 20 6f 62 6a 65 63 74 2c 20 65 78 63 65 70  he object, excep
dbf0: 74 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 73 0a  t normalized as.
dc00: 64 65 73 63 72 69 62 65 64 20 61 62 6f 76 65 20  described above 
dc10: 61 6e 64 20 61 73 20 6d 6f 64 69 66 69 65 64 20  and as modified 
dc20: 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 5b 41  by subsequent [A
dc30: 4c 54 45 52 20 54 41 42 4c 45 5d 20 73 74 61 74  LTER TABLE] stat
dc40: 65 6d 65 6e 74 73 2e 29 5e 0a 5e 28 54 68 65 20  ements.)^.^(The 
dc50: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71  sqlite_master.sq
dc60: 6c 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 74 68  l is NULL for th
dc70: 65 20 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  e [internal inde
dc80: 78 65 73 5d 20 74 68 61 74 20 61 72 65 0a 61 75  xes] that are.au
dc90: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
dca0: 74 65 64 20 62 79 20 5b 55 4e 49 51 55 45 5d 20  ted by [UNIQUE] 
dcb0: 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d  or [PRIMARY KEY]
dcc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 3c   constraints.)^<
dcd0: 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  /p>...<tcl>hd_fr
dce0: 61 67 6d 65 6e 74 20 69 6e 74 73 63 68 65 6d 61  agment intschema
dcf0: 20 7b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d   {internal schem
dd00: 61 20 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e  a objects} \.{in
dd10: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
dd20: 6a 65 63 74 7d 20 7b 69 6e 74 65 72 6e 61 6c 20  ject} {internal 
dd30: 69 6e 64 65 78 7d 20 7b 69 6e 74 65 72 6e 61 6c  index} {internal
dd40: 20 69 6e 64 65 78 65 73 7d 20 5c 0a 7b 69 6e 74   indexes} \.{int
dd50: 65 72 6e 61 6c 20 74 61 62 6c 65 7d 20 7b 69 6e  ernal table} {in
dd60: 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 7d 3c 2f  ternal tables}</
dd70: 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 31 20 49  tcl>.<h4>2.6.1 I
dd80: 6e 74 65 72 6e 61 6c 20 53 63 68 65 6d 61 20 4f  nternal Schema O
dd90: 62 6a 65 63 74 73 3c 2f 68 34 3e 0a 0a 3c 70 3e  bjects</h4>..<p>
dda0: 5e 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20  ^In addition to 
ddb0: 74 68 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 65  the tables, inde
ddc0: 78 65 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 20  xes, views, and 
ddd0: 74 72 69 67 67 65 72 73 20 63 72 65 61 74 65 64  triggers created
dde0: 20 62 79 0a 74 68 65 20 61 70 70 6c 69 63 61 74   by.the applicat
ddf0: 69 6f 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20 64  ion and/or the d
de00: 65 76 65 6c 6f 70 65 72 20 75 73 69 6e 67 20 43  eveloper using C
de10: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73  REATE statements
de20: 20 53 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74 65   SQL, the.sqlite
de30: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6d 61  _master table ma
de40: 79 20 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20 6f  y contain zero o
de50: 72 20 6d 6f 72 65 20 65 6e 74 72 69 65 73 20 66  r more entries f
de60: 6f 72 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c 20  or .<i>internal 
de70: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c 2f  schema objects</
de80: 69 3e 20 74 68 61 74 20 61 72 65 20 63 72 65 61  i> that are crea
de90: 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 66 6f  ted by SQLite fo
dea0: 72 20 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65 72  r its .own inter
deb0: 6e 61 6c 20 75 73 65 2e 20 20 5e 54 68 65 20 6e  nal use.  ^The n
dec0: 61 6d 65 73 20 6f 66 20 69 6e 74 65 72 6e 61 6c  ames of internal
ded0: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 0a   schema objects.
dee0: 61 6c 77 61 79 73 20 62 65 67 69 6e 20 77 69 74  always begin wit
def0: 68 20 22 73 71 6c 69 74 65 5f 22 20 61 6e 64 20  h "sqlite_" and 
df00: 61 6e 79 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  any table, index
df10: 2c 20 76 69 65 77 2c 20 6f 72 20 74 72 69 67 67  , view, or trigg
df20: 65 72 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62 65  er.whose name be
df30: 67 69 6e 73 20 77 69 74 68 20 22 73 71 6c 69 74  gins with "sqlit
df40: 65 5f 22 20 69 73 20 61 6e 20 69 6e 74 65 72 6e  e_" is an intern
df50: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
df60: 2e 0a 5e 53 51 4c 69 74 65 20 70 72 6f 68 69 62  ..^SQLite prohib
df70: 69 74 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  its applications
df80: 20 66 72 6f 6d 20 63 72 65 61 74 69 6e 67 20 6f   from creating o
df90: 62 6a 65 63 74 73 20 77 68 6f 73 65 20 6e 61 6d  bjects whose nam
dfa0: 65 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 73  es begin.with "s
dfb0: 71 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e 49  qlite_".  ..<p>I
dfc0: 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f  nternal schema o
dfd0: 62 6a 65 63 74 73 20 75 73 65 64 20 62 79 20 53  bjects used by S
dfe0: 51 4c 69 74 65 20 6d 61 79 20 69 6e 63 6c 75 64  QLite may includ
dff0: 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a  e the following:
e000: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e  ..<ul>.<li><p>In
e010: 64 69 63 65 73 20 77 69 74 68 20 6e 61 6d 65 73  dices with names
e020: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71   of the form "sq
e030: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54  lite_autoindex_T
e040: 41 42 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20 20  ABLE_N" that.   
e050: 20 20 20 20 61 72 65 20 75 73 65 64 20 74 6f 20      are used to 
e060: 69 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51 55  implement [UNIQU
e070: 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20  E] and [PRIMARY 
e080: 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73  KEY] constraints
e090: 20 6f 6e 0a 20 20 20 20 20 20 20 6f 72 64 69 6e   on.       ordin
e0a0: 61 72 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c 69  ary tables...<li
e0b0: 3e 3c 70 3e 41 20 74 61 62 6c 65 20 77 69 74 68  ><p>A table with
e0c0: 20 74 68 65 20 6e 61 6d 65 20 22 73 71 6c 69 74   the name "sqlit
e0d0: 65 5f 73 65 71 75 65 6e 63 65 22 20 74 68 61 74  e_sequence" that
e0e0: 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70   is used to keep
e0f0: 20 74 72 61 63 6b 0a 20 20 20 20 20 20 20 6f 66   track.       of
e100: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 69 73   the maximum his
e110: 74 6f 72 69 63 61 6c 20 5b 49 4e 54 45 47 45 52  torical [INTEGER
e120: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 6f   PRIMARY KEY] fo
e130: 72 20 61 20 74 61 62 6c 65 20 74 68 61 74 0a 20  r a table that. 
e140: 20 20 20 20 20 20 75 73 69 6e 67 20 5b 41 55 54        using [AUT
e150: 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c  OINCREMENT]...<l
e160: 69 3e 3c 70 3e 54 61 62 6c 65 73 20 77 69 74 68  i><p>Tables with
e170: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f   names of the fo
e180: 72 6d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 4e  rm "sqlite_statN
e190: 22 20 77 68 65 72 65 20 4e 20 69 73 20 61 6e 20  " where N is an 
e1a0: 69 6e 74 65 67 65 72 2e 0a 20 20 20 20 20 20 20  integer..       
e1b0: 53 75 63 68 20 74 61 62 6c 65 73 20 73 74 6f 72  Such tables stor
e1c0: 65 20 64 61 74 61 62 61 73 65 20 73 74 61 74 69  e database stati
e1d0: 73 74 69 63 73 20 67 61 74 68 65 72 65 64 20 62  stics gathered b
e1e0: 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a  y the [ANALYZE].
e1f0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 61         command a
e200: 6e 64 20 75 73 65 64 20 62 79 20 74 68 65 20 71  nd used by the q
e210: 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20  uery planner to 
e220: 68 65 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 74  help determine t
e230: 68 65 20 62 65 73 74 0a 20 20 20 20 20 20 20 61  he best.       a
e240: 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20  lgorithm to use 
e250: 66 6f 72 20 65 61 63 68 20 71 75 65 72 79 2e 0a  for each query..
e260: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e  </ul>..<p>New in
e270: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
e280: 6a 65 63 74 73 20 6e 61 6d 65 73 2c 20 61 6c 77  jects names, alw
e290: 61 79 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ays beginning wi
e2a0: 74 68 20 22 73 71 6c 69 74 65 5f 22 2c 0a 6d 61  th "sqlite_",.ma
e2b0: 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  y be added to th
e2c0: 65 20 53 51 4c 69 74 65 20 66 69 6c 65 20 66 6f  e SQLite file fo
e2d0: 72 6d 61 74 20 69 6e 20 66 75 74 75 72 65 20 72  rmat in future r
e2e0: 65 6c 65 61 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68  eleases...<tcl>h
e2f0: 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 71 74 61  d_fragment seqta
e300: 62 20 7b 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  b {sqlite_sequen
e310: 63 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e  ce}</tcl>.<h4>2.
e320: 36 2e 32 20 54 68 65 20 73 71 6c 69 74 65 5f 73  6.2 The sqlite_s
e330: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 3c 2f 68  equence table</h
e340: 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69  4>..<p>^The sqli
e350: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
e360: 65 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c  e is an internal
e370: 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 68   table used to h
e380: 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 0a 5b 41  elp implement.[A
e390: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 20 20  UTOINCREMENT].  
e3a0: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
e3b0: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 63 72  ence table is cr
e3c0: 65 61 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  eated automatica
e3d0: 6c 6c 79 0a 77 68 65 6e 65 76 65 72 20 61 6e 79  lly.whenever any
e3e0: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
e3f0: 77 69 74 68 20 61 6e 20 41 55 54 4f 49 4e 43 52  with an AUTOINCR
e400: 45 4d 45 4e 54 20 69 6e 74 65 67 65 72 20 70 72  EMENT integer pr
e410: 69 6d 61 72 79 0a 6b 65 79 20 69 73 20 63 72 65  imary.key is cre
e420: 61 74 65 64 2e 20 20 5e 4f 6e 63 65 20 63 72 65  ated.  ^Once cre
e430: 61 74 65 64 2c 20 74 68 65 20 73 71 6c 69 74 65  ated, the sqlite
e440: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
e450: 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a 73 71  exists in the.sq
e460: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
e470: 65 20 66 6f 72 65 76 65 72 3b 20 69 74 20 63 61  e forever; it ca
e480: 6e 6e 6f 74 20 62 65 20 64 72 6f 70 70 65 64 2e  nnot be dropped.
e490: 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20 66 6f  .^(The schema fo
e4a0: 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  r the sqlite_seq
e4b0: 75 65 6e 63 65 20 74 61 62 6c 65 20 69 73 3a 0a  uence table is:.
e4c0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
e4d0: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
e4e0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 28  sqlite_sequence(
e4f0: 6e 61 6d 65 2c 73 65 71 29 3b 0a 3c 2f 70 72 65  name,seq);.</pre
e500: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
e510: 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 69 73 20 61  ..<p>^There is a
e520: 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74   single row in t
e530: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e540: 63 65 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63  ce table for eac
e550: 68 20 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65  h ordinary.table
e560: 20 74 68 61 74 20 75 73 65 73 20 41 55 54 4f 49   that uses AUTOI
e570: 4e 43 52 45 4d 45 4e 54 2e 20 20 5e 28 54 68 65  NCREMENT.  ^(The
e580: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
e590: 6c 65 20 28 61 73 20 69 74 20 61 70 70 65 61 72  le (as it appear
e5a0: 73 20 69 6e 0a 73 71 6c 69 74 65 5f 6d 61 73 74  s in.sqlite_mast
e5b0: 65 72 2e 6e 61 6d 65 29 20 69 73 20 69 6e 20 74  er.name) is in t
e5c0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e5d0: 63 65 2e 6d 61 69 6e 20 66 69 65 6c 64 20 61 6e  ce.main field an
e5e0: 64 20 74 68 65 20 6c 61 72 67 65 73 74 0a 5b 49  d the largest.[I
e5f0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
e600: 45 59 5d 20 65 76 65 72 20 75 73 65 64 20 62 79  EY] ever used by
e610: 20 74 68 61 74 20 74 61 62 6c 65 20 69 73 20 69   that table is i
e620: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  n the sqlite_seq
e630: 75 65 6e 63 65 2e 73 65 71 0a 66 69 65 6c 64 2e  uence.seq.field.
e640: 29 5e 20 20 5e 4e 65 77 20 61 75 74 6f 6d 61 74  )^  ^New automat
e650: 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64  ically generated
e660: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
e670: 20 6b 65 79 73 20 66 6f 72 20 41 55 54 4f 49 4e   keys for AUTOIN
e680: 43 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20 61  CREMENT.tables a
e690: 72 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  re guaranteed to
e6a0: 20 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20   be larger than 
e6b0: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
e6c0: 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 66 6f  nce.seq field fo
e6d0: 72 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 28  r.that table..^(
e6e0: 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  If the sqlite_se
e6f0: 71 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64  quence.seq field
e700: 20 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   of an AUTOINCRE
e710: 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61 6c  MENT table is al
e720: 72 65 61 64 79 20 61 74 0a 74 68 65 20 6c 61 72  ready at.the lar
e730: 67 65 73 74 20 69 6e 74 65 67 65 72 20 76 61 6c  gest integer val
e740: 75 65 20 28 39 32 32 33 33 37 32 30 33 36 38 35  ue (922337203685
e750: 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 61 74  4775807) then at
e760: 74 65 6d 70 74 73 20 74 6f 20 61 64 64 20 6e 65  tempts to add ne
e770: 77 0a 72 6f 77 73 20 74 6f 20 74 68 61 74 20 74  w.rows to that t
e780: 61 62 6c 65 20 77 69 74 68 20 61 6e 20 61 75 74  able with an aut
e790: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
e7a0: 61 74 65 64 20 69 6e 74 65 67 65 72 20 70 72 69  ated integer pri
e7b0: 6d 61 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a 77  mary will fail.w
e7c0: 69 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f 46  ith an [SQLITE_F
e7d0: 55 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e 54  ULL] error.)^.^T
e7e0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e7f0: 63 65 2e 73 65 71 20 66 69 65 6c 64 20 69 73 20  ce.seq field is 
e800: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70  automatically up
e810: 64 61 74 65 64 20 69 66 20 72 65 71 75 69 72 65  dated if require
e820: 64 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72 69  d when.new entri
e830: 65 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  es are added to 
e840: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
e850: 20 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65 20 73   table.  .^The s
e860: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72  qlite_sequence r
e870: 6f 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e  ow for an AUTOIN
e880: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73  CREMENT table is
e890: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
e8a0: 65 6c 65 74 65 64 0a 77 68 65 6e 20 74 68 65 20  eleted.when the 
e8b0: 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64  table is dropped
e8c0: 2e 0a 5e 49 66 20 74 68 65 20 73 71 6c 69 74 65  ..^If the sqlite
e8d0: 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f  _sequence row fo
e8e0: 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  r an AUTOINCREME
e8f0: 4e 54 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f  NT table does no
e900: 74 20 65 78 69 73 74 20 77 68 65 6e 0a 74 68 65  t exist when.the
e910: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
e920: 61 62 6c 65 20 69 73 20 75 70 64 61 74 65 64 2c  able is updated,
e930: 20 74 68 65 6e 20 61 20 6e 65 77 20 73 71 6c 69   then a new sqli
e940: 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20  te_sequence row 
e950: 69 73 20 63 72 65 61 74 65 64 2e 0a 5e 28 49 66  is created..^(If
e960: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
e970: 65 6e 63 65 2e 73 65 71 20 76 61 6c 75 65 20 66  ence.seq value f
e980: 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  or an AUTOINCREM
e990: 45 4e 54 20 74 61 62 6c 65 20 69 73 20 6d 61 6e  ENT table is man
e9a0: 75 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20 73 6f  ually .set to so
e9b0: 6d 65 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68  mething other th
e9c0: 61 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  an an integer an
e9d0: 64 20 74 68 65 72 65 20 69 73 20 61 20 73 75 62  d there is a sub
e9e0: 73 65 71 75 65 6e 74 20 61 74 74 65 6d 70 74 20  sequent attempt 
e9f0: 74 6f 0a 69 6e 73 65 72 74 20 74 68 65 20 6f 72  to.insert the or
ea00: 20 75 70 64 61 74 65 20 74 68 65 20 41 55 54 4f   update the AUTO
ea10: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2c  INCREMENT table,
ea20: 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69   then the behavi
ea30: 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  or is undefined.
ea40: 29 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63 61 74  )^..<p>^Applicat
ea50: 69 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c 6c 6f  ion code is allo
ea60: 77 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  wed to modify th
ea70: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
ea80: 65 20 74 61 62 6c 65 2c 20 74 6f 20 61 64 64 0a  e table, to add.
ea90: 6e 65 77 20 72 6f 77 73 2c 20 74 6f 20 64 65 6c  new rows, to del
eaa0: 65 74 65 20 72 6f 77 73 2c 20 6f 72 20 74 6f 20  ete rows, or to 
eab0: 6d 6f 64 69 66 79 20 65 78 69 73 74 69 6e 67 20  modify existing 
eac0: 72 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c  rows.  ^However,
ead0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 6f 64   application.cod
eae0: 65 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20  e cannot create 
eaf0: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
eb00: 6e 63 65 20 74 61 62 6c 65 20 69 66 20 69 74 20  nce table if it 
eb10: 64 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  does not already
eb20: 20 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69 63 61   exist..^Applica
eb30: 74 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20 64 65  tion code can de
eb40: 6c 65 74 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  lete all entries
eb50: 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65   from the sqlite
eb60: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2c  _sequence table,
eb70: 0a 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  .but application
eb80: 20 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64 72 6f   code cannot dro
eb90: 70 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  p the sqlite_seq
eba0: 75 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a 3c 74  uence table...<t
ebb0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
ebc0: 74 61 74 31 74 61 62 20 7b 73 71 6c 69 74 65 5f  tat1tab {sqlite_
ebd0: 73 74 61 74 31 7d 20 53 51 4c 49 54 45 5f 53 54  stat1} SQLITE_ST
ebe0: 41 54 31 20 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32  AT1 </tcl>.<h4>2
ebf0: 2e 36 2e 33 20 54 68 65 20 73 71 6c 69 74 65 5f  .6.3 The sqlite_
ec00: 73 74 61 74 31 20 74 61 62 6c 65 3c 2f 68 34 3e  stat1 table</h4>
ec10: 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65  ..<p>^The sqlite
ec20: 5f 73 74 61 74 31 20 69 73 20 61 6e 20 69 6e 74  _stat1 is an int
ec30: 65 72 6e 61 6c 20 74 61 62 6c 65 20 63 72 65 61  ernal table crea
ec40: 74 65 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c  ted by the [ANAL
ec50: 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e 64  YZE] command.and
ec60: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 73 75   used to hold su
ec70: 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f 72  pplemental infor
ec80: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 61 62  mation about tab
ec90: 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65 73 20  les and indexes 
eca0: 74 68 61 74 20 74 68 65 0a 71 75 65 72 79 20 70  that the.query p
ecb0: 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74  lanner can use t
ecc0: 6f 20 68 65 6c 70 20 69 74 20 66 69 6e 64 20 62  o help it find b
ecd0: 65 74 74 65 72 20 77 61 79 73 20 6f 66 20 70 65  etter ways of pe
ece0: 72 66 6f 72 6d 69 6e 67 20 71 75 65 72 69 65 73  rforming queries
ecf0: 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73 20  ..^Applications 
ed00: 63 61 6e 20 75 70 64 61 74 65 2c 20 64 65 6c 65  can update, dele
ed10: 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74 20  te from, insert 
ed20: 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74 68 65  into or drop the
ed30: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 0a 74 61   sqlite_stat1.ta
ed40: 62 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f 74  ble, but may not
ed50: 20 63 72 65 61 74 65 20 6f 72 20 61 6c 74 65 72   create or alter
ed60: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
ed70: 31 20 74 61 62 6c 65 2e 0a 5e 28 54 68 65 20 73  1 table..^(The s
ed80: 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
ed90: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20  ite_stat1 table 
eda0: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
edb0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
edc0: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
edd0: 71 6c 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c  qlite_stat1(tbl,
ede0: 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65  idx,stat);.</pre
edf0: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
ee00: 0a 0a 3c 70 3e 20 5e 28 54 68 65 72 65 20 69 73  ..<p> ^(There is
ee10: 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 65 20 72 6f   normally one ro
ee20: 77 20 70 65 72 20 69 6e 64 65 78 2c 20 77 69 74  w per index, wit
ee30: 68 20 74 68 65 20 69 6e 64 65 78 20 69 64 65 6e  h the index iden
ee40: 74 69 66 69 65 64 20 62 79 20 74 68 65 0a 6e 61  tified by the.na
ee50: 6d 65 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  me in the sqlite
ee60: 5f 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d  _stat1.idx colum
ee70: 6e 2e 29 5e 20 20 5e 28 54 68 65 20 73 71 6c 69  n.)^  ^(The sqli
ee80: 74 65 5f 73 74 61 74 31 2e 74 62 6c 20 63 6f 6c  te_stat1.tbl col
ee90: 75 6d 6e 20 69 73 0a 74 68 65 20 6e 61 6d 65 20  umn is.the name 
eea0: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
eeb0: 77 68 69 63 68 20 74 68 65 20 69 6e 64 65 78 20  which the index 
eec0: 62 65 6c 6f 6e 67 73 2e 29 5e 20 20 5e 28 49 6e  belongs.)^  ^(In
eed0: 20 65 61 63 68 20 73 75 63 68 20 72 6f 77 2c 20   each such row, 
eee0: 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .the sqlite_stat
eef0: 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20 77 69 6c  .stat column wil
ef00: 6c 20 62 65 0a 61 20 73 74 72 69 6e 67 20 63 6f  l be.a string co
ef10: 6e 73 69 73 74 69 6e 67 20 6f 66 20 61 20 6c 69  nsisting of a li
ef20: 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73 20 66  st of integers f
ef30: 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20  ollowed by zero 
ef40: 6f 72 20 6d 6f 72 65 20 0a 61 72 67 75 6d 65 6e  or more .argumen
ef50: 74 73 2e 29 5e 20 20 5e 54 68 65 20 66 69 72 73  ts.)^  ^The firs
ef60: 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 69  t integer in thi
ef70: 73 0a 6c 69 73 74 20 69 73 20 74 68 65 20 61 70  s.list is the ap
ef80: 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
ef90: 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
efa0: 69 6e 64 65 78 20 61 6e 64 20 69 6e 20 74 68 65  index and in the
efb0: 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 65 63   table..^The sec
efc0: 6f 6e 64 20 69 6e 74 65 67 65 72 20 69 73 20 74  ond integer is t
efd0: 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 61  he approximate a
efe0: 76 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  verage number of
eff0: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
f000: 65 78 0a 74 68 61 74 20 68 61 76 65 20 74 68 65  ex.that have the
f010: 20 73 61 6d 65 20 76 61 6c 75 65 20 69 6e 20 74   same value in t
f020: 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
f030: 6f 66 20 74 68 65 20 69 6e 64 65 78 2e 20 20 5e  of the index.  ^
f040: 54 68 65 20 74 68 69 72 64 20 0a 69 6e 74 65 67  The third .integ
f050: 65 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  er is the approx
f060: 69 6d 61 74 65 20 61 76 65 72 61 67 65 20 6e 75  imate average nu
f070: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
f080: 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 68  the index that h
f090: 61 76 65 20 0a 74 68 65 20 73 61 6d 65 20 76 61  ave .the same va
f0a0: 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69 72 73  lue for the firs
f0b0: 74 20 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20  t two columns.  
f0c0: 5e 54 68 65 20 4e 2d 74 68 20 69 6e 74 65 67 65  ^The N-th intege
f0d0: 72 20 28 66 6f 72 20 4e 3e 31 29 20 0a 69 73 20  r (for N>1) .is 
f0e0: 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20  the approximate 
f0f0: 61 76 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f  average number o
f100: 66 20 72 6f 77 73 20 69 6e 20 0a 74 68 65 20 69  f rows in .the i
f110: 6e 64 65 78 20 77 68 69 63 68 20 68 61 76 65 20  ndex which have 
f120: 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
f130: 6f 72 20 74 68 65 20 66 69 72 73 74 20 4e 2d 31  or the first N-1
f140: 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a   columns.  ^For.
f150: 61 20 4b 2d 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  a K-column index
f160: 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 62 65 20  , there will be 
f170: 4b 2b 31 20 69 6e 74 65 67 65 72 73 20 69 6e 20  K+1 integers in 
f180: 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 2e  the stat column.
f190: 20 20 5e 49 66 0a 74 68 65 20 69 6e 64 65 78 20    ^If.the index 
f1a0: 69 73 20 75 6e 69 71 75 65 2c 20 74 68 65 6e 20  is unique, then 
f1b0: 74 68 65 20 6c 61 73 74 20 69 6e 74 65 67 65 72  the last integer
f1c0: 20 77 69 6c 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e   will be 1...<p>
f1d0: 5e 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e 74  ^The list of int
f1e0: 65 67 65 72 73 20 69 6e 20 74 68 65 20 73 74 61  egers in the sta
f1f0: 74 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 6f 70 74  t column can opt
f200: 69 6f 6e 61 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f  ionally be follo
f210: 77 65 64 0a 62 79 20 61 72 67 75 6d 65 6e 74 73  wed.by arguments
f220: 2c 20 65 61 63 68 20 6f 66 20 77 68 69 63 68 20  , each of which 
f230: 69 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  is a sequence of
f240: 20 6e 6f 6e 2d 73 70 61 63 65 20 63 68 61 72 61   non-space chara
f250: 63 74 65 72 73 2e 0a 5e 41 6c 6c 20 61 72 67 75  cters..^All argu
f260: 6d 65 6e 74 73 20 61 72 65 20 70 72 65 63 65 64  ments are preced
f270: 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 73  ed by a single s
f280: 70 61 63 65 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69  pace..^Unrecogni
f290: 7a 65 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72  zed arguments ar
f2a0: 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72  e silently ignor
f2b0: 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20  ed...<p>^If the 
f2c0: 22 75 6e 6f 72 64 65 72 65 64 22 20 61 72 67 75  "unordered" argu
f2d0: 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 2c  ment is present,
f2e0: 20 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20   then the query 
f2f0: 70 6c 61 6e 6e 65 72 20 61 73 73 75 6d 65 73 0a  planner assumes.
f300: 74 68 61 74 20 74 68 65 20 69 6e 64 65 78 20 69  that the index i
f310: 73 20 75 6e 6f 72 64 65 72 65 64 20 61 6e 64 20  s unordered and 
f320: 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74 68 65  will not use the
f330: 20 69 6e 64 65 78 20 66 6f 72 20 61 20 72 61 6e   index for a ran
f340: 67 65 20 71 75 65 72 79 0a 6f 72 20 66 6f 72 20  ge query.or for 
f350: 73 6f 72 74 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68  sorting...<p>^Th
f360: 65 20 22 73 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d  e "sz=NNN" argum
f370: 65 6e 74 20 28 77 68 65 72 65 20 4e 4e 4e 20 72  ent (where NNN r
f380: 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 71 75  epresents a sequ
f390: 65 6e 63 65 20 6f 66 20 31 20 6f 72 20 6d 6f 72  ence of 1 or mor
f3a0: 65 20 64 69 67 69 74 73 29 0a 6d 65 61 6e 73 20  e digits).means 
f3b0: 74 68 61 74 20 74 68 65 20 61 76 65 72 61 67 65  that the average
f3c0: 20 72 6f 77 20 73 69 7a 65 20 6f 76 65 72 20 61   row size over a
f3d0: 6c 6c 20 72 65 63 6f 72 64 73 20 6f 66 20 74 68  ll records of th
f3e0: 65 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78  e table or.index
f3f0: 20 69 73 20 4e 4e 4e 20 62 79 74 65 73 20 70 65   is NNN bytes pe
f400: 72 20 72 6f 77 2e 20 20 5e 54 68 65 20 53 51 4c  r row.  ^The SQL
f410: 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  ite query planne
f420: 72 20 6d 69 67 68 74 20 75 73 65 20 74 68 65 0a  r might use the.
f430: 65 73 74 69 6d 61 74 65 64 20 72 6f 77 20 73 69  estimated row si
f440: 7a 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70  ze information p
f450: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 22  rovided by the "
f460: 73 7a 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f  sz=NNN" token.to
f470: 20 68 65 6c 70 20 69 74 20 63 68 6f 6f 73 65 20   help it choose 
f480: 73 6d 61 6c 6c 65 72 20 74 61 62 6c 65 73 20 61  smaller tables a
f490: 6e 64 20 69 6e 64 65 78 65 73 20 74 68 61 74 20  nd indexes that 
f4a0: 72 65 71 75 69 72 65 20 6c 65 73 73 20 64 69 73  require less dis
f4b0: 6b 20 49 2f 4f 2e 0a 0a 3c 70 3e 4e 65 77 20 74  k I/O...<p>New t
f4c0: 65 78 74 20 74 6f 6b 65 6e 73 20 6d 61 79 20 62  ext tokens may b
f4d0: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 65  e added to the e
f4e0: 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74 20 63  nd of the stat c
f4f0: 6f 6c 75 6d 6e 20 69 6e 20 66 75 74 75 72 65 0a  olumn in future.
f500: 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 74 6f 20  enhancements to 
f510: 53 51 4c 69 74 65 2e 20 20 46 6f 72 20 63 6f 6d  SQLite.  For com
f520: 70 61 74 69 62 69 6c 69 74 79 2c 20 75 6e 72 65  patibility, unre
f530: 63 6f 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 73 20  cognized tokens 
f540: 61 74 20 74 68 65 20 65 6e 64 0a 6f 66 20 74 68  at the end.of th
f550: 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 61 72  e stat column ar
f560: 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72  e silently ignor
f570: 65 64 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65  ed...<p>^(If the
f580: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64   sqlite_stat1.id
f590: 78 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  x column is NULL
f5a0: 2c 20 74 68 65 6e 20 74 68 65 20 73 71 6c 69 74  , then the sqlit
f5b0: 65 5f 73 74 61 74 31 2e 73 74 61 74 0a 63 6f 6c  e_stat1.stat.col
f5c0: 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  umn contains a s
f5d0: 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 77 68  ingle integer wh
f5e0: 69 63 68 20 69 73 20 74 68 65 20 61 70 70 72 6f  ich is the appro
f5f0: 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66  ximate number of
f600: 0a 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62  .rows in the tab
f610: 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  le identified by
f620: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62   sqlite_stat1.tb
f630: 6c 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  l.)^..<tcl>hd_fr
f640: 61 67 6d 65 6e 74 20 73 74 61 74 32 74 61 62 20  agment stat2tab 
f650: 7b 73 71 6c 69 74 65 5f 73 74 61 74 32 7d 3c 2f  {sqlite_stat2}</
f660: 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 34 20 54  tcl>.<h4>2.6.4 T
f670: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
f680: 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  table</h4>..<p>T
f690: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
f6a0: 69 73 20 6f 6e 6c 79 20 63 72 65 61 74 65 64 20  is only created 
f6b0: 61 6e 64 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  and is only used
f6c0: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f   if SQLite is co
f6d0: 6d 70 69 6c 65 64 0a 77 69 74 68 20 53 51 4c 49  mpiled.with SQLI
f6e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 20  TE_ENABLE_STAT2 
f6f0: 61 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74  and if the SQLit
f700: 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
f710: 20 69 73 20 62 65 74 77 65 65 6e 0a 33 2e 36 2e   is between.3.6.
f720: 31 38 20 61 6e 64 20 33 2e 37 2e 38 2e 20 20 54  18 and 3.7.8.  T
f730: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
f740: 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72  table is neither
f750: 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65   read nor writte
f760: 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e  n by any.version
f770: 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72   of SQLite befor
f780: 65 20 33 2e 36 2e 31 38 20 6e 6f 72 20 61 66 74  e 3.6.18 nor aft
f790: 65 72 20 33 2e 37 2e 38 2e 0a 54 68 65 20 73 71  er 3.7.8..The sq
f7a0: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
f7b0: 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69   contains additi
f7c0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f7d0: 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72  .about the distr
f7e0: 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20  ibution of keys 
f7f0: 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2e  within an index.
f800: 0a 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74  .The schema of t
f810: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
f820: 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c  table is as foll
f830: 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ows:..<blockquot
f840: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
f850: 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74  ABLE sqlite_stat
f860: 32 28 74 62 6c 2c 69 64 78 2c 73 61 6d 70 6c 65  2(tbl,idx,sample
f870: 6e 6f 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72  no,sample);.</pr
f880: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
f890: 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
f8a0: 74 61 74 32 2e 69 64 78 20 63 6f 6c 75 6d 6e 20  tat2.idx column 
f8b0: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  and the sqlite_s
f8c0: 74 61 74 32 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20  tat2.tbl column 
f8d0: 69 6e 20 65 61 63 68 20 0a 72 6f 77 20 6f 66 20  in each .row of 
f8e0: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  the sqlite_stat2
f8f0: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 79 20   table identify 
f900: 61 6e 20 69 6e 64 65 78 20 64 65 73 63 72 69 62  an index describ
f910: 65 64 20 62 79 20 74 68 61 74 20 72 6f 77 2e 0a  ed by that row..
f920: 54 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c  There are usuall
f930: 79 20 31 30 20 72 6f 77 73 20 69 6e 20 74 68 65  y 10 rows in the
f940: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 0a 74 61   sqlite_stat2.ta
f950: 62 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64  ble for each ind
f960: 65 78 2e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  ex...<p>The sqli
f970: 74 65 5f 73 74 61 74 32 20 65 6e 74 72 69 65 73  te_stat2 entries
f980: 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 74 68   for an index th
f990: 61 74 20 68 61 76 65 20 73 71 6c 69 74 65 5f 73  at have sqlite_s
f9a0: 74 61 74 32 2e 73 61 6d 70 6c 65 6e 6f 0a 62 65  tat2.sampleno.be
f9b0: 74 77 65 65 6e 20 30 20 61 6e 64 20 39 20 69 6e  tween 0 and 9 in
f9c0: 63 6c 75 73 69 76 65 20 61 72 65 20 73 61 6d 70  clusive are samp
f9d0: 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  les of the left-
f9e0: 6d 6f 73 74 20 6b 65 79 20 76 61 6c 75 65 20 69  most key value i
f9f0: 6e 20 74 68 65 0a 69 6e 64 65 78 20 74 61 6b 65  n the.index take
fa00: 6e 20 61 74 20 65 76 65 6e 6c 79 20 73 70 61 63  n at evenly spac
fa10: 65 64 20 70 6f 69 6e 74 73 20 61 6c 6f 6e 67 20  ed points along 
fa20: 74 68 65 20 69 6e 64 65 78 2e 0a 4c 65 74 20 43  the index..Let C
fa30: 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   be the number o
fa40: 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
fa50: 64 65 78 2e 0a 54 68 65 6e 20 74 68 65 20 73 61  dex..Then the sa
fa60: 6d 70 6c 65 64 20 72 6f 77 73 20 61 72 65 20 67  mpled rows are g
fa70: 69 76 65 6e 20 62 79 0a 0a 3c 62 6c 6f 63 6b 71  iven by..<blockq
fa80: 75 6f 74 65 3e 0a 20 20 20 20 20 72 6f 77 6e 75  uote>.     rownu
fa90: 6d 62 65 72 20 3d 20 28 69 2a 43 2a 32 20 2b 20  mber = (i*C*2 + 
faa0: 43 29 2f 32 30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  C)/20.</blockquo
fab0: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 72 69  te>..<p>The vari
fac0: 61 62 6c 65 20 69 20 69 6e 20 74 68 65 20 70 72  able i in the pr
fad0: 65 76 69 6f 75 73 20 65 78 70 72 65 73 73 69 6f  evious expressio
fae0: 6e 20 76 61 72 69 65 73 20 62 65 74 77 65 65 6e  n varies between
faf0: 20 30 20 61 6e 64 20 39 2e 0a 43 6f 6e 63 65 70   0 and 9..Concep
fb00: 74 75 61 6c 6c 79 2c 20 74 68 65 20 69 6e 64 65  tually, the inde
fb10: 78 20 73 70 61 63 65 20 69 73 20 64 69 76 69 64  x space is divid
fb20: 65 64 20 69 6e 74 6f 0a 31 30 20 75 6e 69 66 6f  ed into.10 unifo
fb30: 72 6d 20 62 75 63 6b 65 74 73 20 61 6e 64 20 74  rm buckets and t
fb40: 68 65 20 73 61 6d 70 6c 65 73 20 61 72 65 20 74  he samples are t
fb50: 68 65 20 6d 69 64 64 6c 65 20 72 6f 77 20 66 72  he middle row fr
fb60: 6f 6d 20 65 61 63 68 20 62 75 63 6b 65 74 2e 0a  om each bucket..
fb70: 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 66  .<p>The format f
fb80: 6f 72 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  or sqlite_stat2 
fb90: 69 73 20 72 65 63 6f 72 64 65 64 20 68 65 72 65  is recorded here
fba0: 20 66 6f 72 20 6c 65 67 61 63 79 20 72 65 66 65   for legacy refe
fbb0: 72 65 6e 63 65 2e 20 20 0a 52 65 63 65 6e 74 20  rence.  .Recent 
fbc0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
fbd0: 74 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  te no longer sup
fbe0: 70 6f 72 74 20 73 71 6c 69 74 65 5f 73 74 61 74  port sqlite_stat
fbf0: 32 20 61 6e 64 20 74 68 65 0a 73 71 6c 69 74 65  2 and the.sqlite
fc00: 5f 73 74 61 74 32 20 74 61 62 6c 65 2c 20 69 74  _stat2 table, it
fc10: 20 69 73 20 65 78 69 73 74 73 2c 20 69 73 20 73   is exists, is s
fc20: 69 6d 70 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a  imply ignored...
fc30: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
fc40: 20 73 74 61 74 33 74 61 62 20 7b 73 71 6c 69 74   stat3tab {sqlit
fc50: 65 5f 73 74 61 74 33 7d 20 53 51 4c 49 54 45 5f  e_stat3} SQLITE_
fc60: 53 54 41 54 33 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  STAT3</tcl>.<h4>
fc70: 32 2e 36 2e 35 20 54 68 65 20 73 71 6c 69 74 65  2.6.5 The sqlite
fc80: 5f 73 74 61 74 33 20 74 61 62 6c 65 3c 2f 68 34  _stat3 table</h4
fc90: 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  >..<p>The sqlite
fca0: 5f 73 74 61 74 33 20 69 73 20 6f 6e 6c 79 20 75  _stat3 is only u
fcb0: 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  sed if SQLite is
fcc0: 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b   compiled.with [
fcd0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
fce0: 41 54 33 5d 20 6f 72 20 5b 53 51 4c 49 54 45 5f  AT3] or [SQLITE_
fcf0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a 61 6e  ENABLE_STAT4].an
fd00: 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  d if the SQLite 
fd10: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69  version number i
fd20: 73 20 33 2e 37 2e 39 20 6f 72 20 67 72 65 61 74  s 3.7.9 or great
fd30: 65 72 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73  er..The sqlite_s
fd40: 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 6e 65  tat3 table is ne
fd50: 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77  ither read nor w
fd60: 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65  ritten by any.ve
fd70: 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  rsion of SQLite 
fd80: 62 65 66 6f 72 65 20 33 2e 37 2e 39 2e 0a 49 66  before 3.7.9..If
fd90: 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
fda0: 42 4c 45 5f 53 54 41 54 34 5d 20 63 6f 6d 70 69  BLE_STAT4] compi
fdb0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
fdc0: 73 20 75 73 65 64 20 61 6e 64 20 74 68 65 0a 53  s used and the.S
fdd0: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
fde0: 6d 62 65 72 20 69 73 20 33 2e 38 2e 31 20 6f 72  mber is 3.8.1 or
fdf0: 20 67 72 65 61 74 65 72 2c 20 74 68 65 6e 20 73   greater, then s
fe00: 71 6c 69 74 65 5f 73 74 61 74 33 20 6d 69 67 68  qlite_stat3 migh
fe10: 74 0a 62 65 20 72 65 61 64 20 62 75 74 20 6e 6f  t.be read but no
fe20: 74 20 77 72 69 74 74 65 6e 2e 0a 54 68 65 20 73  t written..The s
fe30: 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
fe40: 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74  e contains addit
fe50: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
fe60: 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74  n.about the dist
fe70: 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73  ribution of keys
fe80: 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78   within an index
fe90: 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  , information th
fea0: 61 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61  at the.query pla
feb0: 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20  nner can use to 
fec0: 64 65 76 69 73 65 20 62 65 74 74 65 72 20 61 6e  devise better an
fed0: 64 20 66 61 73 74 65 72 20 71 75 65 72 79 20 61  d faster query a
fee0: 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65  lgorithms..^(The
fef0: 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73   schema of the s
ff00: 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
ff10: 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  e is as follows:
ff20: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
ff30: 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
ff40: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 28 74 62   sqlite_stat3(tb
ff50: 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44  l,idx,nEq,nLt,nD
ff60: 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72  Lt,sample);.</pr
ff70: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
ff80: 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ^..<p>There are 
ff90: 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65  usually multiple
ffa0: 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
ffb0: 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
ffc0: 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65  le for each inde
ffd0: 78 2e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  x..^(The sqlite_
ffe0: 73 74 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c  stat3.sample col
fff0: 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61  umn holds the va
10000 6c 75 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  lue of the left-
10010 6d 6f 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e  most field of an
10020 0a 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65  .index identifie
10030 64 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74  d by sqlite_stat
10040 33 2e 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65  3.idx and sqlite
10050 5f 73 74 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e 28  _stat3.tbl.)^.^(
10060 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
10070 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  .nEq column hold
10080 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
10090 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e.number of entr
100a0 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ies in the index
100b0 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74   whose left-most
100c0 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79 20   column exactly 
100d0 6d 61 74 63 68 65 73 0a 74 68 65 20 73 61 6d 70  matches.the samp
100e0 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69  le.)^.^(The sqli
100f0 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c  te_stat3.nLt hol
10100 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  ds the approxima
10110 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  te number of ent
10120 72 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65  ries in the.inde
10130 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73  x whose left-mos
10140 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73  t column is less
10150 20 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c 65   than the sample
10160 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  .)^.^(The sqlite
10170 5f 73 74 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75  _stat3.nDLt colu
10180 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70  mn holds the app
10190 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20  roximate.number 
101a0 6f 66 20 64 69 73 74 69 6e 63 74 20 6c 65 66 74  of distinct left
101b0 2d 6d 6f 73 74 20 65 6e 74 72 69 65 73 20 69 6e  -most entries in
101c0 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
101d0 61 72 65 20 6c 65 73 73 20 74 68 61 6e 0a 74 68  are less than.th
101e0 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70 3e  e sample.)^..<p>
101f0 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e  ^There can be an
10200 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65   arbitrary numbe
10210 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74  r of sqlite_stat
10220 33 20 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e  3 entries per in
10230 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a  dex..The [ANALYZ
10240 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  E] command will 
10250 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  typically genera
10260 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  te sqlite_stat3 
10270 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74  tables.that cont
10280 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61  ain between 10 a
10290 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68  nd 40 samples th
102a0 61 74 20 61 72 65 20 64 69 73 74 72 69 62 75 74  at are distribut
102b0 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65  ed across.the ke
102c0 79 20 73 70 61 63 65 20 61 6e 64 20 77 69 74 68  y space and with
102d0 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65   large nEq value
102e0 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  s...<tcl>hd_frag
102f0 6d 65 6e 74 20 73 74 61 74 34 74 61 62 20 7b 73  ment stat4tab {s
10300 71 6c 69 74 65 5f 73 74 61 74 34 7d 20 53 51 4c  qlite_stat4} SQL
10310 49 54 45 5f 53 54 41 54 34 3c 2f 74 63 6c 3e 0a  ITE_STAT4</tcl>.
10320 3c 68 34 3e 32 2e 36 2e 36 20 54 68 65 20 73 71  <h4>2.6.6 The sq
10330 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
10340 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 71  </h4>..<p>The sq
10350 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20 6f 6e  lite_stat4 is on
10360 6c 79 20 63 72 65 61 74 65 64 20 61 6e 64 20 69  ly created and i
10370 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53  s only used if S
10380 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65  QLite is compile
10390 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45  d.with [SQLITE_E
103a0 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 61 6e 64  NABLE_STAT4] and
103b0 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 76   if the SQLite v
103c0 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73  ersion number is
103d0 0a 33 2e 38 2e 31 20 6f 72 20 67 72 65 61 74 65  .3.8.1 or greate
103e0 72 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73  r.  The sqlite_s
103f0 74 61 74 34 20 74 61 62 6c 65 20 69 73 20 6e 65  tat4 table is ne
10400 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77  ither read nor w
10410 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65  ritten by any.ve
10420 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  rsion of SQLite 
10430 62 65 66 6f 72 65 20 33 2e 38 2e 31 2e 0a 54 68  before 3.8.1..Th
10440 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
10450 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64  able contains ad
10460 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
10470 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64  tion.about the d
10480 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b  istribution of k
10490 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e  eys within an in
104a0 64 65 78 20 6f 72 20 74 68 65 20 64 69 73 74 72  dex or the distr
104b0 69 62 75 74 69 6f 6e 20 6f 66 0a 6b 65 79 73 20  ibution of.keys 
104c0 69 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  in the primary k
104d0 65 79 20 6f 66 20 61 20 5b 57 49 54 48 4f 55 54  ey of a [WITHOUT
104e0 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54   ROWID] table..T
104f0 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
10500 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 75   can sometimes u
10510 73 65 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61  se the additiona
10520 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  l information in
10530 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .the sqlite_stat
10540 34 20 74 61 62 6c 65 20 74 6f 20 64 65 76 69 73  4 table to devis
10550 65 20 62 65 74 74 65 72 20 61 6e 64 20 66 61 73  e better and fas
10560 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f 72 69  ter query algori
10570 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63 68 65  thms..^(The sche
10580 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ma of the sqlite
10590 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69 73 20  _stat4 table is 
105a0 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c  as follows:..<bl
105b0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
105c0 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
105d0 74 65 5f 73 74 61 74 34 28 74 62 6c 2c 69 64 78  te_stat4(tbl,idx
105e0 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61  ,nEq,nLt,nDLt,sa
105f0 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  mple);.</pre></b
10600 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
10610 3e 54 68 65 72 65 20 61 72 65 20 74 79 70 69 63  >There are typic
10620 61 6c 6c 79 20 62 65 74 77 65 65 6e 20 31 30 20  ally between 10 
10630 74 6f 20 34 30 20 65 6e 74 72 69 65 73 20 69 6e  to 40 entries in
10640 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10650 34 20 74 61 62 6c 65 20 66 6f 72 0a 65 61 63 68  4 table for.each
10660 20 69 6e 64 65 78 20 66 6f 72 20 77 68 69 63 68   index for which
10670 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20   statistics are 
10680 61 76 61 69 6c 61 62 6c 65 2c 20 68 6f 77 65 76  available, howev
10690 65 72 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20  er these limits 
106a0 61 72 65 0a 6e 6f 74 20 68 61 72 64 20 62 6f 75  are.not hard bou
106b0 6e 64 73 2e 0a 54 68 65 20 6d 65 61 6e 69 6e 67  nds..The meaning
106c0 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  s of the columns
106d0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
106e0 74 61 74 34 20 74 61 62 6c 65 20 61 72 65 20 61  tat4 table are a
106f0 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e  s follows:..<cen
10700 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  ter>.<table bord
10710 65 72 3d 22 30 22 20 77 69 64 74 68 3d 22 31 30  er="0" width="10
10720 30 25 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  0%" cellpadding=
10730 22 31 30 22 3e 0a 3c 74 72 3e 3c 74 64 20 76 61  "10">.<tr><td va
10740 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
10750 3d 22 72 69 67 68 74 22 3e 74 62 6c 3a 3c 2f 74  ="right">tbl:</t
10760 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65  d>.    <td>^(The
10770 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 74 62   sqlite_stat4.tb
10780 6c 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e  l column holds n
10790 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
107a0 20 74 68 61 74 20 6f 77 6e 73 0a 20 20 20 20 74   that owns.    t
107b0 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 74 68  he index that th
107c0 65 20 72 6f 77 20 64 65 73 63 72 69 62 65 73 29  e row describes)
107d0 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ^..<tr><td valig
107e0 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
107f0 69 67 68 74 22 3e 69 64 78 3a 3c 2f 74 64 3e 0a  ight">idx:</td>.
10800 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71      <td>^(The sq
10810 6c 69 74 65 5f 73 74 61 74 34 2e 69 64 78 20 63  lite_stat4.idx c
10820 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65  olumn holds name
10830 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 74 68   of the index th
10840 61 74 20 74 68 65 0a 20 20 20 20 72 6f 77 20 64  at the.    row d
10850 65 73 63 72 69 62 65 73 2c 20 6f 72 20 69 6e 20  escribes, or in 
10860 74 68 65 20 63 61 73 65 20 6f 66 0a 20 20 20 20  the case of.    
10870 61 6e 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  an sqlite_stat4 
10880 65 6e 74 72 79 20 66 6f 72 20 61 20 5b 57 49 54  entry for a [WIT
10890 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
108a0 65 2c 20 74 68 65 0a 20 20 20 20 6e 61 6d 65 20  e, the.    name 
108b0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 74 73  of the table its
108c0 65 6c 66 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20  elf.)^..<tr><td 
108d0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
108e0 67 6e 3d 22 72 69 67 68 74 22 3e 73 61 6d 70 6c  gn="right">sampl
108f0 65 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e  e:</td>.    <td>
10900 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ^(The sqlite_sta
10910 74 34 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e  t4.sample column
10920 20 68 6f 6c 64 73 20 61 20 42 4c 4f 42 0a 20 20   holds a BLOB.  
10930 20 20 69 6e 20 74 68 65 20 5b 72 65 63 6f 72 64    in the [record
10940 20 66 6f 72 6d 61 74 5d 20 74 68 61 74 20 65 6e   format] that en
10950 63 6f 64 65 73 20 74 68 65 20 69 6e 64 65 78 65  codes the indexe
10960 64 20 63 6f 6c 75 6d 6e 73 20 66 6f 6c 6c 6f 77  d columns follow
10970 65 64 20 62 79 0a 20 20 20 20 74 68 65 20 72 6f  ed by.    the ro
10980 77 69 64 20 66 6f 72 20 61 20 72 6f 77 69 64 20  wid for a rowid 
10990 74 61 62 6c 65 20 6f 72 20 62 79 20 74 68 65 20  table or by the 
109a0 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 70  columns of the p
109b0 72 69 6d 61 72 79 20 6b 65 79 20 0a 20 20 20 20  rimary key .    
109c0 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f  for a WITHOUT RO
109d0 57 49 44 20 74 61 62 6c 65 2e 29 5e 0a 20 20 20  WID table.)^.   
109e0 20 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74   ^(The sqlite_st
109f0 61 74 34 2e 73 61 6d 70 6c 65 20 42 4c 4f 42 20  at4.sample BLOB 
10a00 66 6f 72 20 74 68 65 20 57 49 54 48 4f 55 54 20  for the WITHOUT 
10a10 52 4f 57 49 44 20 74 61 62 6c 65 20 69 74 73 65  ROWID table itse
10a20 6c 66 20 0a 20 20 20 20 63 6f 6e 74 61 69 6e 73  lf .    contains
10a30 20 6a 75 73 74 20 74 68 65 20 63 6f 6c 75 6d 6e   just the column
10a40 73 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  s of the primary
10a50 20 6b 65 79 2e 29 5e 0a 20 20 20 20 4c 65 74 20   key.)^.    Let 
10a60 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
10a70 6c 75 6d 6e 73 20 65 6e 63 6f 64 65 64 20 62 79  lumns encoded by
10a80 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10a90 34 2e 73 61 6d 70 6c 65 20 62 6c 6f 62 20 62 65  4.sample blob be
10aa0 20 4e 2e 0a 20 20 20 20 5e 46 6f 72 20 69 6e 64   N..    ^For ind
10ab0 65 78 65 73 20 6f 6e 20 61 6e 20 6f 72 64 69 6e  exes on an ordin
10ac0 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65 2c  ary rowid table,
10ad0 20 4e 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d   N will be one m
10ae0 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e 75 6d  ore than the num
10af0 62 65 72 20 0a 20 20 20 20 6f 66 20 63 6f 6c 75  ber .    of colu
10b00 6d 6e 73 20 69 6e 64 65 78 65 64 2e 0a 20 20 20  mns indexed..   
10b10 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e   ^For indexes on
10b20 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
10b30 61 62 6c 65 73 2c 20 4e 20 77 69 6c 6c 20 62 65  ables, N will be
10b40 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
10b50 6f 6c 75 6d 6e 73 0a 20 20 20 20 69 6e 64 65 78  olumns.    index
10b60 65 64 20 70 6c 75 73 20 74 68 65 20 6e 75 6d 62  ed plus the numb
10b70 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
10b80 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
10b90 2e 0a 20 20 20 20 5e 46 6f 72 20 61 20 57 49 54  ..    ^For a WIT
10ba0 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
10bb0 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68 65 20  , N will be the 
10bc0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
10bd0 73 20 69 6e 20 74 68 65 0a 20 20 20 20 70 72 69  s in the.    pri
10be0 6d 61 72 79 20 6b 65 79 2e 0a 0a 3c 74 72 3e 3c  mary key...<tr><
10bf0 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
10c00 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 45  align="right">nE
10c10 71 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e  q:</td>.    <td>
10c20 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ^(The sqlite_sta
10c30 74 34 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f  t4.nEq column ho
10c40 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20 4e 20  lds a list of N 
10c50 69 6e 74 65 67 65 72 73 20 77 68 65 72 65 20 0a  integers where .
10c60 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69 6e 74      the K-th int
10c70 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70 72  eger is the appr
10c80 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
10c90 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  f entries in the
10ca0 20 69 6e 64 65 78 0a 20 20 20 20 77 68 6f 73 65   index.    whose
10cb0 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c   left-most K col
10cc0 75 6d 6e 73 20 65 78 61 63 74 6c 79 20 6d 61 74  umns exactly mat
10cd0 63 68 20 74 68 65 20 4b 20 6c 65 66 74 2d 6d 6f  ch the K left-mo
10ce0 73 74 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 6f  st columns.    o
10cf0 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a  f the sample.)^.
10d00 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
10d10 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
10d20 68 74 22 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a 20 20  ht">nLt:</td>.  
10d30 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69    <td>^(The sqli
10d40 74 65 5f 73 74 61 74 34 2e 6e 4c 74 20 63 6f 6c  te_stat4.nLt col
10d50 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73 74  umn holds a list
10d60 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73 20 77   of N integers w
10d70 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b 2d 74  here.    the K-t
10d80 68 20 69 6e 74 65 67 65 72 20 69 73 20 74 68 65  h integer is the
10d90 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d   approximate num
10da0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
10db0 6e 20 74 68 65 0a 20 20 20 20 69 6e 64 65 78 20  n the.    index 
10dc0 77 68 6f 73 65 20 4b 20 6c 65 66 74 2d 6d 6f 73  whose K left-mos
10dd0 74 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f  t columns are co
10de0 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73 20  llectively less 
10df0 74 68 61 6e 20 74 68 65 20 0a 20 20 20 20 4b 20  than the .    K 
10e00 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
10e10 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e  s of the sample.
10e20 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  )^..<tr><td vali
10e30 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
10e40 72 69 67 68 74 22 3e 6e 44 4c 74 3a 3c 2f 74 64  right">nDLt:</td
10e50 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20  >.    <td>^(The 
10e60 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 44 4c  sqlite_stat4.nDL
10e70 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61  t column holds a
10e80 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74 65 67   list of N integ
10e90 65 72 73 20 77 68 65 72 65 0a 20 20 20 20 74 68  ers where.    th
10ea0 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 73 20  e K-th integers 
10eb0 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
10ec0 74 65 0a 20 20 20 20 6e 75 6d 62 65 72 20 6f 66  te.    number of
10ed0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
10ee0 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 64  index that are d
10ef0 69 73 74 69 6e 63 74 20 69 6e 20 74 68 65 20 66  istinct in the f
10f00 69 72 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61  irst K columns a
10f10 6e 64 0a 20 20 20 20 74 68 61 74 20 61 72 65 20  nd.    that are 
10f20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20  whose left-most 
10f30 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f  K columns are co
10f40 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73 20  llectively less 
10f50 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2d 6d 6f  than the left-mo
10f60 73 74 0a 20 20 20 20 4b 20 63 6f 6c 75 6d 6e 73  st.    K columns
10f70 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29   of the sample.)
10f80 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e  ^.</table>.</cen
10f90 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  ter>..<p>The sql
10fa0 69 74 65 5f 73 74 61 74 34 20 69 73 20 61 20 67  ite_stat4 is a g
10fb0 65 6e 65 72 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  eneralization of
10fc0 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10fd0 33 20 74 61 62 6c 65 2e 20 20 54 68 65 0a 73 71  3 table.  The.sq
10fe0 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
10ff0 20 70 72 6f 76 69 64 65 73 20 69 6e 66 6f 72 6d   provides inform
11000 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
11010 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
11020 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20 77 68 65   of an.index whe
11030 72 65 61 73 20 74 68 65 20 73 71 6c 69 74 65 5f  reas the sqlite_
11040 73 74 61 74 34 20 74 61 62 6c 65 20 70 72 6f 76  stat4 table prov
11050 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ides information
11060 20 61 62 6f 75 74 20 61 6c 6c 20 63 6f 6c 75 6d   about all colum
11070 6e 73 0a 6f 66 20 74 68 65 20 69 6e 64 65 78 2e  ns.of the index.
11080 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e 20  ..<p>^There can 
11090 62 65 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  be an arbitrary 
110a0 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65  number of sqlite
110b0 5f 73 74 61 74 34 20 65 6e 74 72 69 65 73 20 70  _stat4 entries p
110c0 65 72 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41  er index..The [A
110d0 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20  NALYZE] command 
110e0 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67  will typically g
110f0 65 6e 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73  enerate sqlite_s
11100 74 61 74 34 20 74 61 62 6c 65 73 0a 74 68 61 74  tat4 tables.that
11110 20 63 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e   contain between
11120 20 31 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c   10 and 40 sampl
11130 65 73 20 74 68 61 74 20 61 72 65 20 64 69 73 74  es that are dist
11140 72 69 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74  ributed across.t
11150 68 65 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64  he key space and
11160 20 77 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20   with large nEq 
11170 76 61 6c 75 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64  values...<tcl>hd
11180 5f 66 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62 61  _fragment rollba
11190 63 6b 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62  ckjournal {rollb
111a0 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d  ack journal form
111b0 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e  at}</tcl>.<h2>3.
111c0 30 20 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a  0 The Rollback J
111d0 6f 75 72 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e  ournal</h2>..<p>
111e0 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  The rollback jou
111f0 72 6e 61 6c 20 69 73 20 61 20 66 69 6c 65 20 61  rnal is a file a
11200 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65  ssociated with e
11210 61 63 68 20 53 51 4c 69 74 65 20 64 61 74 61 62  ach SQLite datab
11220 61 73 65 0a 66 69 6c 65 20 74 68 61 74 20 68 6f  ase.file that ho
11230 6c 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ld information u
11240 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74  sed to restore t
11250 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
11260 20 74 6f 20 69 74 73 20 69 6e 69 74 69 61 6c 0a   to its initial.
11270 73 74 61 74 65 20 64 75 72 69 6e 67 20 74 68 65  state during the
11280 20 63 6f 75 72 73 65 20 6f 66 20 61 20 74 72 61   course of a tra
11290 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72  nsaction..^The r
112a0 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
112b0 66 69 6c 65 20 69 73 20 61 6c 77 61 79 73 20 6c  file is always l
112c0 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20 73 61  ocated in the sa
112d0 6d 65 20 0a 64 69 72 65 63 74 6f 72 79 20 61 73  me .directory as
112e0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69   the database.fi
112f0 6c 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73  le and has the s
11300 61 6d 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20  ame name as the 
11310 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 75  database file bu
11320 74 20 77 69 74 68 20 74 68 65 20 73 74 72 69 6e  t with the strin
11330 67 0a 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c  g."<tt>-journal<
11340 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e 20  /tt>" appended. 
11350 20 54 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20   There can only 
11360 62 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c  be a single roll
11370 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73  back journal.ass
11380 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 67  ociated with a g
11390 69 76 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  ive database and
113a0 20 68 65 6e 63 65 20 74 68 65 72 65 20 63 61 6e   hence there can
113b0 20 6f 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72 69   only be one wri
113c0 74 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te.transaction o
113d0 70 65 6e 20 61 67 61 69 6e 73 74 20 61 20 73 69  pen against a si
113e0 6e 67 6c 65 20 64 61 74 61 62 61 73 65 20 61 74  ngle database at
113f0 20 6f 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a   one time.</p>..
11400 3c 70 3e 49 66 20 61 20 74 72 61 6e 73 61 63 74  <p>If a transact
11410 69 6f 6e 20 69 73 20 61 62 6f 72 74 65 64 20 64  ion is aborted d
11420 75 65 20 74 6f 20 61 6e 20 61 70 70 6c 69 63 61  ue to an applica
11430 74 69 6f 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f  tion crash, an o
11440 70 65 72 61 74 69 6e 67 0a 73 79 73 74 65 6d 20  perating.system 
11450 63 72 61 73 68 2c 20 6f 72 20 61 20 68 61 72 64  crash, or a hard
11460 77 61 72 65 20 70 6f 77 65 72 20 66 61 69 6c 75  ware power failu
11470 72 65 20 6f 72 20 63 72 61 73 68 2c 20 74 68 65  re or crash, the
11480 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d  n the database m
11490 61 79 0a 62 65 20 6c 65 66 74 20 69 6e 20 61 6e  ay.be left in an
114a0 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   inconsistent st
114b0 61 74 65 2e 20 20 5e 54 68 65 20 6e 65 78 74 20  ate.  ^The next 
114c0 74 69 6d 65 20 53 51 4c 69 74 65 20 61 74 74 65  time SQLite atte
114d0 6d 70 74 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65  mpts to open.the
114e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20   database file, 
114f0 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20  the presence of 
11500 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  the rollback jou
11510 72 6e 61 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62  rnal file will b
11520 65 20 0a 64 65 74 65 63 74 65 64 20 61 6e 64 20  e .detected and 
11530 74 68 65 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c  the journal will
11540 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   be automaticall
11550 79 20 70 6c 61 79 65 64 20 62 61 63 6b 20 74 6f  y played back to
11560 20 72 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74   restore the.dat
11570 61 62 61 73 65 20 74 6f 20 69 74 73 20 73 74 61  abase to its sta
11580 74 65 20 61 74 20 74 68 65 20 73 74 61 72 74 20  te at the start 
11590 6f 66 20 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74  of the incomplet
115a0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f  e transaction.</
115b0 70 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61  p>..<p>^A rollba
115c0 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e  ck journal is on
115d0 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  ly considered to
115e0 20 62 65 20 76 61 6c 69 64 20 69 66 20 69 74 20   be valid if it 
115f0 65 78 69 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61  exists and.conta
11600 69 6e 73 20 61 20 76 61 6c 69 64 20 68 65 61 64  ins a valid head
11610 65 72 2e 20 20 48 65 6e 63 65 20 61 20 74 72 61  er.  Hence a tra
11620 6e 73 61 63 74 69 6f 6e 20 63 61 6e 20 62 65 20  nsaction can be 
11630 63 6f 6d 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65  committed in one
11640 0a 6f 66 20 74 68 72 65 65 20 77 61 79 73 3a 0a  .of three ways:.
11650 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 54 68 65 20 72  <ol>.<li>^(The r
11660 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
11670 66 69 6c 65 20 63 61 6e 20 62 65 20 64 65 6c 65  file can be dele
11680 74 65 64 29 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65  ted)^,.<li>^(The
11690 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
116a0 6c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 74 72  l file can be tr
116b0 75 6e 63 61 74 65 64 20 74 6f 20 7a 65 72 6f 20  uncated to zero 
116c0 6c 65 6e 67 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69  length)^, or.<li
116d0 3e 5e 28 54 68 65 20 68 65 61 64 65 72 20 6f 66  >^(The header of
116e0 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f   the rollback jo
116f0 75 72 6e 61 6c 20 63 61 6e 20 62 65 20 6f 76 65  urnal can be ove
11700 72 77 72 69 74 74 65 6e 20 77 69 74 68 0a 69 6e  rwritten with.in
11710 76 61 6c 69 64 20 68 65 61 64 65 72 20 74 65 78  valid header tex
11720 74 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20  t (for example, 
11730 61 6c 6c 20 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f  all zeros).)^.</
11740 6f 6c 3e 0a 5e 54 68 65 73 65 20 74 68 72 65 65  ol>.^These three
11750 20 77 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74 74   ways of committ
11760 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ing a transactio
11770 6e 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  n correspond to 
11780 74 68 65 20 44 45 4c 45 54 45 2c 0a 54 52 55 4e  the DELETE,.TRUN
11790 43 41 54 45 2c 20 61 6e 64 20 50 45 52 53 49 53  CATE, and PERSIS
117a0 54 20 73 65 74 74 69 6e 67 73 2c 20 72 65 73 70  T settings, resp
117b0 65 63 74 69 76 65 6c 79 2c 20 6f 66 20 74 68 65  ectively, of the
117c0 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70   [journal_mode p
117d0 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c  ragma]..</p>...<
117e0 70 3e 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62 61  p>A valid rollba
117f0 63 6b 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69 6e  ck journal begin
11800 73 20 77 69 74 68 20 61 20 68 65 61 64 65 72 20  s with a header 
11810 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
11820 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63   format:</p>..<c
11830 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61  enter>.<i>Rollba
11840 63 6b 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64 65  ck Journal Heade
11850 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
11860 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38  .<table width="8
11870 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  0%" border=1>.<t
11880 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
11890 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
118a0 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ion.<tr><td vali
118b0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
118c0 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61  ter>0.    <td va
118d0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
118e0 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e  enter>8.    <td>
118f0 48 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20 20  Header string:  
11900 30 78 64 39 2c 20 30 78 64 35 2c 20 30 78 30 35  0xd9, 0xd5, 0x05
11910 2c 20 30 78 66 39 2c 20 30 78 32 30 2c 20 30 78  , 0xf9, 0x20, 0x
11920 61 31 2c 20 30 78 36 33 2c 20 30 78 64 37 0a 3c  a1, 0x63, 0xd7.<
11930 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
11940 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
11950 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
11960 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
11970 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 22  >4.    <td>The "
11980 50 61 67 65 20 43 6f 75 6e 74 22 20 2d 20 54 68  Page Count" - Th
11990 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
119a0 73 20 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65  s in the next se
119b0 67 6d 65 6e 74 20 6f 66 20 74 68 65 20 0a 20 20  gment of the .  
119c0 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f        journal, o
119d0 72 20 2d 31 20 74 6f 0a 20 20 20 20 20 20 20 20  r -1 to.        
119e0 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  mean all content
119f0 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74   to the end of t
11a00 68 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20  he file.<tr><td 
11a10 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
11a20 3d 63 65 6e 74 65 72 3e 31 32 0a 20 20 20 20 3c  =center>12.    <
11a30 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
11a40 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
11a50 20 3c 74 64 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f   <td>A random no
11a60 6e 63 65 20 66 6f 72 20 74 68 65 20 63 68 65 63  nce for the chec
11a70 6b 73 75 6d 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ksum.<tr><td val
11a80 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
11a90 6e 74 65 72 3e 31 36 0a 20 20 20 20 3c 74 64 20  nter>16.    <td 
11aa0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
11ab0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
11ac0 64 3e 49 6e 69 74 69 61 6c 20 73 69 7a 65 20 6f  d>Initial size o
11ad0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
11ae0 6e 20 70 61 67 65 73 0a 3c 74 72 3e 3c 74 64 20  n pages.<tr><td 
11af0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
11b00 3d 63 65 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c  =center>20.    <
11b10 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
11b20 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
11b30 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 61 20 64   <td>Size of a d
11b40 69 73 6b 20 73 65 63 74 6f 72 20 61 73 73 75 6d  isk sector assum
11b50 65 64 20 62 79 20 74 68 65 20 70 72 6f 63 65 73  ed by the proces
11b60 73 20 74 68 61 74 20 77 72 6f 74 65 20 74 68 69  s that wrote thi
11b70 73 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61  s.        journa
11b80 6c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  l..<tr><td valig
11b90 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
11ba0 65 72 3e 32 34 0a 20 20 20 20 3c 74 64 20 76 61  er>24.    <td va
11bb0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
11bc0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
11bd0 53 69 7a 65 20 6f 66 20 70 61 67 65 73 20 69 6e  Size of pages in
11be0 20 74 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c   this journal..<
11bf0 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
11c00 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63  >..<p>^A rollbac
11c10 6b 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  k journal header
11c20 20 69 73 20 70 61 64 64 65 64 20 77 69 74 68 20   is padded with 
11c30 7a 65 72 6f 73 20 6f 75 74 20 74 6f 20 74 68 65  zeros out to the
11c40 20 73 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e 67   size of a .sing
11c50 6c 65 20 73 65 63 74 6f 72 20 28 61 73 20 64 65  le sector (as de
11c60 66 69 6e 65 64 20 62 79 20 74 68 65 20 73 65 63  fined by the sec
11c70 74 6f 72 20 73 69 7a 65 20 69 6e 74 65 67 65 72  tor size integer
11c80 20 61 74 20 6f 66 66 73 65 74 20 32 30 29 2e 0a   at offset 20)..
11c90 54 68 65 20 68 65 61 64 65 72 20 69 73 20 69 6e  The header is in
11ca0 20 61 20 73 65 63 74 6f 72 20 62 79 20 69 74 73   a sector by its
11cb0 65 6c 66 20 73 6f 20 74 68 61 74 20 69 66 20 61  elf so that if a
11cc0 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63 75   power loss occu
11cd0 72 73 20 77 68 69 6c 65 0a 77 72 69 74 69 6e 67  rs while.writing
11ce0 20 74 68 65 20 73 65 63 74 6f 72 2c 20 69 6e 66   the sector, inf
11cf0 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 66 6f  ormation that fo
11d00 6c 6c 6f 77 73 20 74 68 65 20 68 65 61 64 65 72  llows the header
11d10 20 77 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66 75   will be.(hopefu
11d20 6c 6c 79 29 20 75 6e 64 61 6d 61 67 65 64 2e 3c  lly) undamaged.<
11d30 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 74  /p>..<p>^After t
11d40 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 7a 65  he header and ze
11d50 72 6f 20 70 61 64 64 69 6e 67 20 61 72 65 20 7a  ro padding are z
11d60 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67 65  ero or more page
11d70 20 72 65 63 6f 72 64 73 2e 20 20 5e 45 61 63 68   records.  ^Each
11d80 0a 70 61 67 65 20 72 65 63 6f 72 64 20 73 74 6f  .page record sto
11d90 72 65 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68  res a copy of th
11da0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 70  e content of a p
11db0 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  age from the dat
11dc0 61 62 61 73 65 20 66 69 6c 65 0a 62 65 66 6f 72  abase file.befor
11dd0 65 20 69 74 20 77 61 73 20 63 68 61 6e 67 65 64  e it was changed
11de0 2e 20 20 5e 54 68 65 20 73 61 6d 65 20 70 61 67  .  ^The same pag
11df0 65 20 6d 61 79 20 6e 6f 74 20 61 70 70 65 61 72  e may not appear
11e00 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 0a   more than once.
11e10 77 69 74 68 69 6e 20 61 20 73 69 6e 67 6c 65 20  within a single 
11e20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
11e30 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  ..To rollback an
11e40 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e   incomplete tran
11e50 73 61 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63 65  saction, a proce
11e60 73 73 0a 68 61 73 20 6d 65 72 65 6c 79 20 74 6f  ss.has merely to
11e70 20 72 65 61 64 20 74 68 65 20 72 6f 6c 6c 62 61   read the rollba
11e80 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d 20  ck journal from 
11e90 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e 64  beginning to end
11ea0 20 61 6e 64 0a 77 72 69 74 65 20 70 61 67 65 73   and.write pages
11eb0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a 6f   found in the jo
11ec0 75 72 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f 20  urnal back into 
11ed0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
11ee0 65 20 61 74 20 74 68 65 0a 61 70 70 72 6f 70 72  e at the.appropr
11ef0 69 61 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f  iate location.</
11f00 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 64  p>..<p>Let the d
11f10 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
11f20 65 20 28 74 68 65 20 76 61 6c 75 65 20 6f 66 20  e (the value of 
11f30 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
11f40 66 66 73 65 74 20 32 34 20 0a 69 6e 20 74 68 65  ffset 24 .in the
11f50 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 29   journal header)
11f60 20 62 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65 20   be N..Then the 
11f70 66 6f 72 6d 61 74 20 6f 66 20 61 20 70 61 67 65  format of a page
11f80 20 72 65 63 6f 72 64 20 69 73 20 61 73 20 66 6f   record is as fo
11f90 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  llows:</p>..<cen
11fa0 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b  ter>.<i>Rollback
11fb0 20 4a 6f 75 72 6e 61 6c 20 50 61 67 65 20 52 65   Journal Page Re
11fc0 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  cord Format</i><
11fd0 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
11fe0 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
11ff0 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
12000 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
12010 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
12020 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12030 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64  center>0.    <td
12040 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12050 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12060 74 64 3e 54 68 65 20 70 61 67 65 20 6e 75 6d 62  td>The page numb
12070 65 72 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  er in the databa
12080 73 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20  se file.<tr><td 
12090 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
120a0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
120b0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
120c0 67 6e 3d 63 65 6e 74 65 72 3e 4e 0a 20 20 20 20  gn=center>N.    
120d0 3c 74 64 3e 4f 72 69 67 69 6e 61 6c 20 63 6f 6e  <td>Original con
120e0 74 65 6e 74 20 6f 66 20 74 68 65 20 70 61 67 65  tent of the page
120f0 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 73 74   prior to the st
12100 61 72 74 20 6f 66 20 74 68 65 20 74 72 61 6e 73  art of the trans
12110 61 63 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  action.<tr><td v
12120 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12130 63 65 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c  center>N+4.    <
12140 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12150 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
12160 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f   <td>Checksum.</
12170 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
12180 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 63 68 65 63  ...<p>^(The chec
12190 6b 73 75 6d 20 69 73 20 61 6e 20 75 6e 73 69 67  ksum is an unsig
121a0 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67  ned 32-bit integ
121b0 65 72 20 63 6f 6d 70 75 74 65 64 20 61 73 20 66  er computed as f
121c0 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows:</p>..<ol
121d0 3e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65  >.<li>Initialize
121e0 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 74 6f   the checksum to
121f0 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6e 6f   the checksum no
12200 6e 63 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20  nce value found 
12210 69 6e 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20 68  in the.journal h
12220 65 61 64 65 72 20 61 74 20 6f 66 66 73 65 74 20  eader at offset 
12230 31 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69  12..<li>Initiali
12240 7a 65 20 69 6e 64 65 78 20 58 20 74 6f 20 62 65  ze index X to be
12250 20 4e 2d 32 30 30 20 28 77 68 65 72 65 20 4e 20   N-200 (where N 
12260 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61  is the size of a
12270 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 69   database page.i
12280 6e 20 62 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74  n bytes..<li>Int
12290 65 72 70 72 65 74 20 74 68 65 20 66 6f 75 72 20  erpret the four 
122a0 62 79 74 65 73 20 61 74 20 6f 66 66 73 65 74 20  bytes at offset 
122b0 58 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20  X into the page 
122c0 61 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  as a 4-byte big-
122d0 65 6e 64 69 61 6e 0a 75 6e 73 69 67 6e 65 64 20  endian.unsigned 
122e0 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 74 68  integer.  Add th
122f0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20  e value of that 
12300 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65 20 63  integer to the c
12310 68 65 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62  hecksum..<li>Sub
12320 74 72 61 63 65 20 32 30 30 20 66 72 6f 6d 20 58  trace 200 from X
12330 2e 0a 3c 6c 69 3e 49 66 20 58 20 69 73 20 67 72  ..<li>If X is gr
12340 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
12350 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20  ual to zero, go 
12360 62 61 63 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a  back to step 3..
12370 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20  </ol>)^..<p>The 
12380 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 20 69  checksum value i
12390 73 20 75 73 65 64 20 74 6f 20 67 75 61 72 64 20  s used to guard 
123a0 61 67 61 69 6e 73 74 20 69 6e 63 6f 6d 70 6c 65  against incomple
123b0 74 65 20 77 72 69 74 65 73 20 6f 66 0a 61 20 6a  te writes of.a j
123c0 6f 75 72 6e 61 6c 20 70 61 67 65 20 72 65 63 6f  ournal page reco
123d0 72 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70  rd following a p
123e0 6f 77 65 72 20 66 61 69 6c 75 72 65 2e 20 20 41  ower failure.  A
123f0 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f   different rando
12400 6d 20 6e 6f 6e 63 65 0a 69 73 20 75 73 65 64 20  m nonce.is used 
12410 65 61 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e  each time a tran
12420 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
12430 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d  ed in order to m
12440 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 69 73 6b  inimize the risk
12450 0a 74 68 61 74 20 75 6e 77 72 69 74 74 65 6e 20  .that unwritten 
12460 73 65 63 74 6f 72 73 20 6d 69 67 68 74 20 62 79  sectors might by
12470 20 63 68 61 6e 63 65 20 63 6f 6e 74 61 69 6e 20   chance contain 
12480 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 73 61  data from the sa
12490 6d 65 20 70 61 67 65 0a 74 68 61 74 20 77 61 73  me page.that was
124a0 20 61 20 70 61 72 74 20 6f 66 20 70 72 69 6f 72   a part of prior
124b0 20 6a 6f 75 72 6e 61 6c 73 2e 20 20 42 79 20 63   journals.  By c
124c0 68 61 6e 67 69 6e 67 20 74 68 65 20 6e 6f 6e 63  hanging the nonc
124d0 65 20 66 6f 72 20 65 61 63 68 0a 74 72 61 6e 73  e for each.trans
124e0 61 63 74 69 6f 6e 2c 20 73 74 61 6c 65 20 64 61  action, stale da
124f0 74 61 20 6f 6e 20 64 69 73 6b 20 77 69 6c 6c 20  ta on disk will 
12500 73 74 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 61  still generate a
12510 6e 20 69 6e 63 6f 72 72 65 63 74 20 63 68 65 63  n incorrect chec
12520 6b 73 75 6d 0a 61 6e 64 20 62 65 20 64 65 74 65  ksum.and be dete
12530 63 74 65 64 20 77 69 74 68 20 68 69 67 68 20 70  cted with high p
12540 72 6f 62 61 62 69 6c 69 74 79 2e 20 20 54 68 65  robability.  The
12550 20 63 68 65 63 6b 73 75 6d 20 6f 6e 6c 79 20 75   checksum only u
12560 73 65 73 20 61 20 73 70 61 72 73 65 20 73 61 6d  ses a sparse sam
12570 70 6c 65 0a 6f 66 20 33 32 2d 62 69 74 20 77 6f  ple.of 32-bit wo
12580 72 64 73 20 66 72 6f 6d 20 74 68 65 20 64 61 74  rds from the dat
12590 61 20 72 65 63 6f 72 64 20 66 6f 72 20 70 65 72  a record for per
125a0 66 6f 72 6d 61 6e 63 65 20 72 65 61 73 6f 6e 73  formance reasons
125b0 20 2d 20 64 65 73 69 67 6e 20 73 74 75 64 69 65   - design studie
125c0 73 20 0a 64 75 72 69 6e 67 20 74 68 65 20 70 6c  s .during the pl
125d0 61 6e 6e 69 6e 67 20 70 68 61 73 65 73 20 6f 66  anning phases of
125e0 20 53 51 4c 69 74 65 20 33 2e 30 2e 30 20 73 68   SQLite 3.0.0 sh
125f0 6f 77 65 64 0a 61 20 73 69 67 6e 69 66 69 63 61  owed.a significa
12600 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 68  nt performance h
12610 69 74 20 69 6e 20 63 68 65 63 6b 73 75 6d 6d 69  it in checksummi
12620 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  ng the entire pa
12630 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20  ge.</p>..<p>Let 
12640 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20 76  the page count v
12650 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20 38  alue at offset 8
12660 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20   in the journal 
12670 68 65 61 64 65 72 20 62 65 20 4d 2e 0a 5e 49 66  header be M..^If
12680 20 4d 20 69 73 20 67 72 65 61 74 65 72 20 74 68   M is greater th
12690 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 61 66 74  an zero then aft
126a0 65 72 20 4d 20 70 61 67 65 20 72 65 63 6f 72 64  er M page record
126b0 73 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69  s the journal fi
126c0 6c 65 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20 70  le.may be zero p
126d0 61 64 64 65 64 20 6f 75 74 20 74 6f 20 74 68 65  added out to the
126e0 20 6e 65 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f   next multiple o
126f0 66 20 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a  f the sector siz
12700 65 20 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a 6f  e and another.jo
12710 75 72 6e 61 6c 20 68 65 61 64 65 72 20 6d 61 79  urnal header may
12720 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 20 5e   be inserted.  ^
12730 41 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  All journal head
12740 65 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  ers within the s
12750 61 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74  ame.journal must
12760 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d   contain the sam
12770 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
12780 73 69 7a 65 20 61 6e 64 20 73 65 63 74 6f 72 20  size and sector 
12790 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  size.</p>..<p>^I
127a0 66 20 4d 20 69 73 20 2d 31 20 69 6e 20 74 68 65  f M is -1 in the
127b0 20 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c   initial journal
127c0 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 74 68   header, then th
127d0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
127e0 20 72 65 63 6f 72 64 73 0a 74 68 61 74 20 66 6f   records.that fo
127f0 6c 6c 6f 77 20 69 73 20 63 6f 6d 70 75 74 65 64  llow is computed
12800 20 62 79 20 63 6f 6d 70 75 74 69 6e 67 20 68 6f   by computing ho
12810 77 20 6d 61 6e 79 20 70 61 67 65 20 72 65 63 6f  w many page reco
12820 72 64 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a  rds will fit in.
12830 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 73 70  the available sp
12840 61 63 65 20 6f 66 20 74 68 65 20 72 65 6d 61 69  ace of the remai
12850 6e 64 65 72 20 6f 66 20 74 68 65 20 6a 6f 75 72  nder of the jour
12860 6e 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  nal file.</p>..<
12870 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
12880 77 61 6c 66 6f 72 6d 61 74 20 7b 57 41 4c 20 66  walformat {WAL f
12890 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32  ormat}</tcl>.<h2
128a0 3e 34 2e 30 20 54 68 65 20 57 72 69 74 65 2d 41  >4.0 The Write-A
128b0 68 65 61 64 20 4c 6f 67 3c 2f 68 32 3e 0a 0a 3c  head Log</h2>..<
128c0 70 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  p>Beginning with
128d0 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30 5d   [version 3.7.0]
128e0 2c 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  , SQLite support
128f0 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74  s a new transact
12900 69 6f 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65 63 68  ion.control mech
12910 61 6e 69 73 6d 20 63 61 6c 6c 65 64 20 22 5b 57  anism called "[W
12920 41 4c 20 7c 20 77 72 69 74 65 2d 61 68 65 61 64  AL | write-ahead
12930 20 6c 6f 67 5d 22 20 6f 72 20 22 5b 57 41 4c 5d   log]" or "[WAL]
12940 22 2e 0a 5e 57 68 65 6e 20 61 20 64 61 74 61 62  "..^When a datab
12950 61 73 65 20 69 73 20 69 6e 20 57 41 4c 20 6d 6f  ase is in WAL mo
12960 64 65 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63 74 69  de, all connecti
12970 6f 6e 73 20 74 6f 20 74 68 61 74 20 64 61 74 61  ons to that data
12980 62 61 73 65 20 6d 75 73 74 0a 75 73 65 20 74 68  base must.use th
12990 65 20 57 41 4c 2e 20 20 5e 41 20 70 61 72 74 69  e WAL.  ^A parti
129a0 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 77  cular database w
129b0 69 6c 6c 20 75 73 65 20 65 69 74 68 65 72 20 61  ill use either a
129c0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
129d0 6c 0a 6f 72 20 61 20 57 41 4c 2c 20 62 75 74 20  l.or a WAL, but 
129e0 6e 6f 74 20 62 6f 74 68 20 61 74 20 74 68 65 20  not both at the 
129f0 73 61 6d 65 20 74 69 6d 65 2e 0a 5e 54 68 65 20  same time..^The 
12a00 57 41 4c 20 69 73 20 61 6c 77 61 79 73 20 6c 6f  WAL is always lo
12a10 63 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  cated in the sam
12a20 65 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74  e directory as t
12a30 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  he database.file
12a40 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d   and has the sam
12a50 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61  e name as the da
12a60 74 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20  tabase file but 
12a70 77 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a  with the string.
12a80 22 3c 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20  "<tt>-wal</tt>" 
12a90 61 70 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c  appended.</p>..<
12aa0 68 33 3e 34 2e 31 20 57 41 4c 20 46 69 6c 65 20  h3>4.1 WAL File 
12ab0 46 6f 72 6d 61 74 3c 2f 68 34 3e 0a 0a 3c 70 3e  Format</h4>..<p>
12ac0 41 20 57 41 4c 20 66 69 6c 65 20 63 6f 6e 73 69  A WAL file consi
12ad0 73 74 73 20 6f 66 20 61 20 68 65 61 64 65 72 20  sts of a header 
12ae0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f  followed by zero
12af0 20 6f 72 20 6d 6f 72 65 20 22 66 72 61 6d 65 73   or more "frames
12b00 22 2e 0a 45 61 63 68 20 66 72 61 6d 65 20 72 65  "..Each frame re
12b10 63 6f 72 64 73 20 74 68 65 20 72 65 76 69 73 65  cords the revise
12b20 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 73  d content of a s
12b30 69 6e 67 6c 65 20 70 61 67 65 20 66 72 6f 6d 20  ingle page from 
12b40 74 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c  the.database fil
12b50 65 2e 20 20 41 6c 6c 20 63 68 61 6e 67 65 73 20  e.  All changes 
12b60 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
12b70 61 72 65 20 72 65 63 6f 72 64 65 64 20 62 79 20  are recorded by 
12b80 77 72 69 74 69 6e 67 0a 66 72 61 6d 65 73 20 69  writing.frames i
12b90 6e 74 6f 20 74 68 65 20 57 41 4c 2e 20 20 54 72  nto the WAL.  Tr
12ba0 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6d 6d 69  ansactions commi
12bb0 74 20 77 68 65 6e 20 61 20 66 72 61 6d 65 20 69  t when a frame i
12bc0 73 20 77 72 69 74 74 65 6e 20 74 68 61 74 0a 63  s written that.c
12bd0 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6d 6d 69 74  ontains a commit
12be0 20 6d 61 72 6b 65 72 2e 20 20 5e 41 20 73 69 6e   marker.  ^A sin
12bf0 67 6c 65 20 57 41 4c 20 63 61 6e 20 61 6e 64 20  gle WAL can and 
12c00 75 73 75 61 6c 6c 79 20 64 6f 65 73 20 72 65 63  usually does rec
12c10 6f 72 64 20 0a 6d 75 6c 74 69 70 6c 65 20 74 72  ord .multiple tr
12c20 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 50 65 72  ansactions.  Per
12c30 69 6f 64 69 63 61 6c 6c 79 2c 20 74 68 65 20 63  iodically, the c
12c40 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 57 41  ontent of the WA
12c50 4c 20 69 73 0a 74 72 61 6e 73 66 65 72 72 65 64  L is.transferred
12c60 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64   back into the d
12c70 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20  atabase file in 
12c80 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63 61 6c  an operation cal
12c90 6c 65 64 20 61 0a 22 63 68 65 63 6b 70 6f 69 6e  led a."checkpoin
12ca0 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73  t".</p>..<p>^A s
12cb0 69 6e 67 6c 65 20 57 41 4c 20 66 69 6c 65 20 63  ingle WAL file c
12cc0 61 6e 20 62 65 20 72 65 75 73 65 64 20 6d 75 6c  an be reused mul
12cd0 74 69 70 6c 65 20 74 69 6d 65 73 2e 20 20 5e 49  tiple times.  ^I
12ce0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
12cf0 68 65 0a 57 41 4c 20 63 61 6e 20 66 69 6c 6c 20  he.WAL can fill 
12d00 75 70 20 77 69 74 68 20 66 72 61 6d 65 73 20 61  up with frames a
12d10 6e 64 20 74 68 65 6e 20 62 65 20 63 68 65 63 6b  nd then be check
12d20 70 6f 69 6e 74 65 64 20 61 6e 64 20 74 68 65 6e  pointed and then
12d30 20 6e 65 77 0a 66 72 61 6d 65 73 20 63 61 6e 20   new.frames can 
12d40 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 6f 6c  overwrite the ol
12d50 64 20 6f 6e 65 73 2e 20 20 5e 41 20 57 41 4c 20  d ones.  ^A WAL 
12d60 61 6c 77 61 79 73 20 67 72 6f 77 73 20 66 72 6f  always grows fro
12d70 6d 20 62 65 67 69 6e 6e 69 6e 67 0a 74 6f 77 61  m beginning.towa
12d80 72 64 20 74 68 65 20 65 6e 64 2e 20 20 43 68 65  rd the end.  Che
12d90 63 6b 73 75 6d 73 20 61 6e 64 20 63 6f 75 6e 74  cksums and count
12da0 65 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ers attached to 
12db0 65 61 63 68 20 66 72 61 6d 65 20 61 72 65 0a 75  each frame are.u
12dc0 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
12dd0 20 77 68 69 63 68 20 66 72 61 6d 65 73 20 77 69   which frames wi
12de0 74 68 69 6e 20 74 68 65 20 57 41 4c 20 61 72 65  thin the WAL are
12df0 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68   valid and which
12e00 0a 61 72 65 20 6c 65 66 74 6f 76 65 72 73 20 66  .are leftovers f
12e10 72 6f 6d 20 70 72 69 6f 72 20 63 68 65 63 6b 70  rom prior checkp
12e20 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  oints.</p>..<p>^
12e30 28 54 68 65 20 57 41 4c 20 68 65 61 64 65 72 20  (The WAL header 
12e40 69 73 20 33 32 20 62 79 74 65 73 20 69 6e 20 73  is 32 bytes in s
12e50 69 7a 65 20 61 6e 64 20 63 6f 6e 73 69 73 74 73  ize and consists
12e60 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
12e70 67 20 65 69 67 68 74 0a 62 69 67 2d 65 6e 64 69  g eight.big-endi
12e80 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e  an 32-bit unsign
12e90 65 64 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ed integer value
12ea0 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  s:</p>..<center>
12eb0 0a 3c 69 3e 57 41 4c 20 48 65 61 64 65 72 20 46  .<i>WAL Header F
12ec0 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
12ed0 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22  able width="80%"
12ee0 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c   border=1>.<tr><
12ef0 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a  th>Offset<th>Siz
12f00 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e  e<th>Description
12f10 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12f20 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12f30 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >0<td valign=top
12f40 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
12f50 20 20 20 20 3c 74 64 3e 4d 61 67 69 63 20 6e 75      <td>Magic nu
12f60 6d 62 65 72 2e 20 20 30 78 33 37 37 66 30 36 38  mber.  0x377f068
12f70 32 20 6f 72 20 30 78 33 37 37 66 30 36 38 33 0a  2 or 0x377f0683.
12f80 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12f90 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12fa0 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
12fb0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
12fc0 20 20 20 3c 74 64 3e 46 69 6c 65 20 66 6f 72 6d     <td>File form
12fd0 61 74 20 76 65 72 73 69 6f 6e 2e 20 20 43 75 72  at version.  Cur
12fe0 72 65 6e 74 6c 79 20 33 30 30 37 30 30 30 2e 0a  rently 3007000..
12ff0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13000 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13010 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
13020 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13030 20 20 20 3c 74 64 3e 44 61 74 61 62 61 73 65 20     <td>Database 
13040 70 61 67 65 20 73 69 7a 65 2e 20 20 45 78 61 6d  page size.  Exam
13050 70 6c 65 3a 20 31 30 32 34 0a 3c 74 72 3e 3c 74  ple: 1024.<tr><t
13060 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13070 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20  gn=center>12<td 
13080 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13090 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
130a0 64 3e 43 68 65 63 6b 70 6f 69 6e 74 20 73 65 71  d>Checkpoint seq
130b0 75 65 6e 63 65 20 6e 75 6d 62 65 72 0a 3c 74 72  uence number.<tr
130c0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
130d0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c  align=center>16<
130e0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
130f0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
13100 20 3c 74 64 3e 53 61 6c 74 2d 31 3a 20 72 61 6e   <td>Salt-1: ran
13110 64 6f 6d 20 69 6e 74 65 67 65 72 20 69 6e 63 72  dom integer incr
13120 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
13130 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72  h checkpoint.<tr
13140 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13150 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c  align=center>20<
13160 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13170 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
13180 20 3c 74 64 3e 53 61 6c 74 2d 32 3a 20 61 20 64   <td>Salt-2: a d
13190 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20  ifferent random 
131a0 6e 75 6d 62 65 72 20 66 6f 72 20 65 61 63 68 20  number for each 
131b0 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c  checkpoint.<tr><
131c0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
131d0 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64  ign=center>24<td
131e0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
131f0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
13200 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 46  td>Checksum-1: F
13210 69 72 73 74 20 70 61 72 74 20 6f 66 20 61 20 63  irst part of a c
13220 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66  hecksum on the f
13230 69 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66  irst 24 bytes of
13240 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20   header.<tr><td 
13250 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13260 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61  =center>28<td va
13270 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13280 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13290 43 68 65 63 6b 73 75 6d 2d 32 3a 20 53 65 63 6f  Checksum-2: Seco
132a0 6e 64 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  nd part of the c
132b0 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66  hecksum on the f
132c0 69 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66  irst 24 bytes of
132d0 20 68 65 61 64 65 72 0a 3c 2f 74 61 62 6c 65 3e   header.</table>
132e0 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70  .</center>)^..<p
132f0 3e 5e 49 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  >^Immediately fo
13300 6c 6c 6f 77 69 6e 67 20 74 68 65 20 77 61 6c 2d  llowing the wal-
13310 68 65 61 64 65 72 20 61 72 65 20 7a 65 72 6f 20  header are zero 
13320 6f 72 20 6d 6f 72 65 20 66 72 61 6d 65 73 2e 20  or more frames. 
13330 5e 45 61 63 68 0a 66 72 61 6d 65 20 63 6f 6e 73  ^Each.frame cons
13340 69 73 74 73 20 6f 66 20 61 20 32 34 2d 62 79 74  ists of a 24-byt
13350 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 66  e frame-header f
13360 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 3c 69 3e  ollowed by a <i>
13370 70 61 67 65 2d 73 69 7a 65 3c 2f 69 3e 20 62 79  page-size</i> by
13380 74 65 73 0a 6f 66 20 70 61 67 65 20 64 61 74 61  tes.of page data
13390 2e 20 5e 28 54 68 65 20 66 72 61 6d 65 2d 68 65  . ^(The frame-he
133a0 61 64 65 72 20 69 73 20 73 69 78 20 62 69 67 2d  ader is six big-
133b0 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e  endian 32-bit un
133c0 73 69 67 6e 65 64 20 0a 69 6e 74 65 67 65 72 20  signed .integer 
133d0 76 61 6c 75 65 73 2c 20 61 73 20 66 6f 6c 6c 6f  values, as follo
133e0 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  ws:..<center>.<i
133f0 3e 57 41 4c 20 46 72 61 6d 65 20 48 65 61 64 65  >WAL Frame Heade
13400 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
13410 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38  .<table width="8
13420 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  0%" border=1>.<t
13430 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
13440 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
13450 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ion.<tr><td vali
13460 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13470 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>0<td valign=
13480 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13490 3e 34 0a 20 20 20 20 3c 74 64 3e 50 61 67 65 20  >4.    <td>Page 
134a0 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76  number.<tr><td v
134b0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
134c0 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69  center>4<td vali
134d0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
134e0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 6f  ter>4.    <td>Fo
134f0 72 20 63 6f 6d 6d 69 74 20 72 65 63 6f 72 64 73  r commit records
13500 2c 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  , the size of th
13510 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
13520 69 6e 20 70 61 67 65 73 0a 20 20 20 20 20 20 20  in pages.       
13530 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d 6d 69   after the commi
13540 74 2e 20 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65  t.  For all othe
13550 72 20 72 65 63 6f 72 64 73 2c 20 7a 65 72 6f 2e  r records, zero.
13560 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13570 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13580 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >8<td valign=top
13590 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
135a0 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 20 63      <td>Salt-1 c
135b0 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57  opied from the W
135c0 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74  AL header.<tr><t
135d0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
135e0 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20  gn=center>12<td 
135f0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13600 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
13610 64 3e 53 61 6c 74 2d 32 20 63 6f 70 69 65 64 20  d>Salt-2 copied 
13620 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61  from the WAL hea
13630 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  der.<tr><td vali
13640 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13650 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e  ter>16<td valign
13660 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13670 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
13680 6b 73 75 6d 2d 31 3a 20 20 43 75 6d 75 6c 61 74  ksum-1:  Cumulat
13690 69 76 65 20 63 68 65 63 6b 73 75 6d 20 75 70 20  ive checksum up 
136a0 74 68 72 6f 75 67 68 20 61 6e 64 20 69 6e 63 6c  through and incl
136b0 75 64 69 6e 67 20 74 68 69 73 20 70 61 67 65 0a  uding this page.
136c0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
136d0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
136e0 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  20<td valign=top
136f0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13700 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
13710 2d 32 3a 20 20 53 65 63 6f 6e 64 20 68 61 6c 66  -2:  Second half
13720 20 6f 66 20 74 68 65 20 63 75 6d 75 6c 61 74 69   of the cumulati
13730 76 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74  ve checksum..</t
13740 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29  able>.</center>)
13750 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72 61 6d 65 20  ^..^(<p>A frame 
13760 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 76 61  is considered va
13770 6c 69 64 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  lid if and only 
13780 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  if the following
13790 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 0a   conditions are.
137a0 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  true:</p>..<ol>.
137b0 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 61 6c 74 2d  <li><p>The salt-
137c0 31 20 61 6e 64 20 73 61 6c 74 2d 32 20 76 61 6c  1 and salt-2 val
137d0 75 65 73 20 69 6e 20 74 68 65 20 66 72 61 6d 65  ues in the frame
137e0 2d 68 65 61 64 65 72 20 6d 61 74 63 68 0a 20 20  -header match.  
137f0 20 20 20 20 20 73 61 6c 74 20 76 61 6c 75 65 73       salt values
13800 20 69 6e 20 74 68 65 20 77 61 6c 2d 68 65 61 64   in the wal-head
13810 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  er</p></li>..<li
13820 3e 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d  ><p>The checksum
13830 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66   values in the f
13840 69 6e 61 6c 20 38 20 62 79 74 65 73 20 6f 66 20  inal 8 bytes of 
13850 74 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  the frame-header
13860 0a 20 20 20 20 20 20 20 65 78 61 63 74 6c 79 20  .       exactly 
13870 6d 61 74 63 68 20 74 68 65 20 63 68 65 63 6b 73  match the checks
13880 75 6d 20 63 6f 6d 70 75 74 65 64 20 63 6f 6e 73  um computed cons
13890 65 63 75 74 69 76 65 6c 79 20 6f 6e 20 74 68 65  ecutively on the
138a0 0a 20 20 20 20 20 20 20 66 69 72 73 74 20 32 34  .       first 24
138b0 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41   bytes of the WA
138c0 4c 20 68 65 61 64 65 72 20 61 6e 64 20 74 68 65  L header and the
138d0 20 66 69 72 73 74 20 38 20 62 79 74 65 73 20 61   first 8 bytes a
138e0 6e 64 0a 20 20 20 20 20 20 20 74 68 65 20 63 6f  nd.       the co
138f0 6e 74 65 6e 74 20 6f 66 20 61 6c 6c 20 66 72 61  ntent of all fra
13900 6d 65 73 0a 20 20 20 20 20 20 20 75 70 20 74 6f  mes.       up to
13910 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
13920 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
13930 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a  .</p></li></li>.
13940 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  </ol>)^..<tcl>hd
13950 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 63 6b 73  _fragment walcks
13960 6d 20 7b 57 41 4c 20 63 68 65 63 6b 73 75 6d 20  m {WAL checksum 
13970 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e  algorithm}</tcl>
13980 0a 3c 68 33 3e 34 2e 32 20 43 68 65 63 6b 73 75  .<h3>4.2 Checksu
13990 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e  m Algorithm</h3>
139a0 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
139b0 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  m is computed by
139c0 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
139d0 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76  e input as.an ev
139e0 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73  en number of uns
139f0 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74  igned 32-bit int
13a00 65 67 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f  egers: x(0) thro
13a10 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33  ugh x(N)..^The 3
13a20 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 61  2-bit integers a
13a30 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66  re big-endian if
13a40 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65   the.magic numbe
13a50 72 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 34  r in the first 4
13a60 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41   bytes of the WA
13a70 4c 20 68 65 61 64 65 72 20 69 73 20 30 78 33 37  L header is 0x37
13a80 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69  7f0683 and.the i
13a90 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69 74 74  ntegers are litt
13aa0 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65  le-endian if the
13ab0 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73   magic number is
13ac0 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68   0x377f0682..^Th
13ad0 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65  e checksum value
13ae0 73 20 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f  s are always sto
13af0 72 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65  red in the frame
13b00 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67   header in a.big
13b10 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72  -endian format r
13b20 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69  egardless of whi
13b30 63 68 20 62 79 74 65 20 6f 72 64 65 72 20 69 73  ch byte order is
13b40 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65   used to compute
13b50 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f  .the checksum.</
13b60 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  p>..<p>The check
13b70 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e  sum algorithm on
13b80 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e  ly works for con
13b90 74 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20  tent which is a 
13ba0 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79  multiple of.8 by
13bb0 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20  tes in length.  
13bc0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
13bd0 69 66 20 74 68 65 20 69 6e 70 75 74 73 20 61 72  if the inputs ar
13be0 65 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78  e x(0) through x
13bf0 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20  (N).then N must 
13c00 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68  be odd..^(The ch
13c10 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d  ecksum algorithm
13c20 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
13c30 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
13c40 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a  e> .s0 = s1 = 0.
13c50 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20  for i from 0 to 
13c60 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73  n-1 step 2:.   s
13c70 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a  0 += x(i) + s1;.
13c80 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20     s1 += x(i+1) 
13c90 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72  + s0;.endfor.# r
13ca0 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20  esult in s0 and 
13cb0 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  s1.</pre></block
13cc0 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  quote>)^..<p>^Th
13cd0 65 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64  e outputs s0 and
13ce0 20 73 31 20 61 72 65 20 62 6f 74 68 20 77 65 69   s1 are both wei
13cf0 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20  ghted checksums 
13d00 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20  using Fibonacci 
13d10 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72  weights.in rever
13d20 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65  se order.  (^The
13d30 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63   largest Fibonac
13d40 63 69 20 77 65 69 67 68 74 20 6f 63 63 75 72 73  ci weight occurs
13d50 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c   on the first el
13d60 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71  ement.of the seq
13d70 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d  uence being summ
13d80 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61  ed.)  ^The s1 va
13d90 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32  lue spans all 32
13da0 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72  -bit integer.ter
13db0 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e  ms of the sequen
13dc0 63 65 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d  ce whereas s0 om
13dd0 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65  its the final te
13de0 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 33  rm.</p>..<h3>4.3
13df0 20 43 68 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f   Checkpoint Algo
13e00 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  rithm</h3>..<p>^
13e10 4f 6e 20 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74  On a [checkpoint
13e20 5d 2c 20 74 68 65 20 57 41 4c 20 69 73 20 66 69  ], the WAL is fi
13e30 72 73 74 20 66 6c 75 73 68 65 64 20 74 6f 20 70  rst flushed to p
13e40 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67  ersistent storag
13e50 65 20 75 73 69 6e 67 0a 74 68 65 20 78 53 79 6e  e using.the xSyn
13e60 63 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  c method of the 
13e70 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68  [sqlite3_io_meth
13e80 6f 64 73 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68  ods | VFS]. .^Th
13e90 65 6e 20 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74  en valid content
13ea0 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73 20 74   of the WAL is t
13eb0 72 61 6e 73 66 65 72 72 65 64 20 69 6e 74 6f 20  ransferred into 
13ec0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
13ed0 65 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65  e..^Finally, the
13ee0 20 64 61 74 61 62 61 73 65 20 69 73 20 66 6c 75   database is flu
13ef0 73 68 65 64 20 74 6f 20 70 65 72 73 69 73 74 65  shed to persiste
13f00 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67  nt storage using
13f10 20 61 6e 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d   another.xSync m
13f20 65 74 68 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20  ethod call..The 
13f30 78 53 79 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73  xSync operations
13f40 20 73 65 72 76 65 20 61 73 20 77 72 69 74 65 20   serve as write 
13f50 62 61 72 72 69 65 72 73 20 2d 20 61 6c 6c 20 77  barriers - all w
13f60 72 69 74 65 73 20 6c 61 75 6e 63 68 65 64 0a 62  rites launched.b
13f70 65 66 6f 72 65 20 74 68 65 20 78 53 79 6e 63 20  efore the xSync 
13f80 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 62 65  must complete be
13f90 66 6f 72 65 20 61 6e 79 20 77 72 69 74 65 20 74  fore any write t
13fa0 68 61 74 20 6c 61 75 6e 63 68 65 73 20 61 66 74  hat launches aft
13fb0 65 72 20 74 68 65 0a 78 53 79 6e 63 20 62 65 67  er the.xSync beg
13fc0 69 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66  ins.</p>..<p>^Af
13fd0 74 65 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f  ter each checkpo
13fe0 69 6e 74 2c 20 74 68 65 20 57 41 4c 20 68 65 61  int, the WAL hea
13ff0 64 65 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65  der salt-1 value
14000 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
14010 61 6e 64 20 74 68 65 20 0a 73 61 6c 74 2d 32 20  and the .salt-2 
14020 76 61 6c 75 65 20 69 73 20 72 61 6e 64 6f 6d 69  value is randomi
14030 7a 65 64 2e 20 20 54 68 69 73 20 70 72 65 76 65  zed.  This preve
14040 6e 74 73 20 6f 6c 64 20 61 6e 64 20 6e 65 77 20  nts old and new 
14050 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41  frames in the WA
14060 4c 20 66 72 6f 6d 0a 62 65 69 6e 67 20 63 6f 6e  L from.being con
14070 73 69 64 65 72 65 64 20 76 61 6c 69 64 20 61 74  sidered valid at
14080 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 61   the same time a
14090 6e 64 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f  nd being checkpo
140a0 69 6e 74 69 6e 67 20 74 6f 67 65 74 68 65 72 0a  inting together.
140b0 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 63 72 61 73  following a cras
140c0 68 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  h.</p>..<tcl>hd_
140d0 66 72 61 67 6d 65 6e 74 20 77 61 6c 72 65 61 64  fragment walread
140e0 20 7b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72   {WAL read algor
140f0 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ithm}</tcl>.<h3>
14100 34 2e 34 20 52 65 61 64 65 72 20 41 6c 67 6f 72  4.4 Reader Algor
14110 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  ithm</h3>..<p>^(
14120 54 6f 20 72 65 61 64 20 61 20 70 61 67 65 20 66  To read a page f
14130 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
14140 20 28 63 61 6c 6c 20 69 74 20 70 61 67 65 20 6e   (call it page n
14150 75 6d 62 65 72 20 50 29 2c 20 61 20 72 65 61 64  umber P), a read
14160 65 72 0a 66 69 72 73 74 20 63 68 65 63 6b 73 20  er.first checks 
14170 74 68 65 20 57 41 4c 20 74 6f 20 73 65 65 20 69  the WAL to see i
14180 66 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 70 61  f it contains pa
14190 67 65 20 50 2e 20 20 49 66 20 73 6f 2c 20 74 68  ge P.  If so, th
141a0 65 6e 20 74 68 65 0a 6c 61 73 74 20 76 61 6c 69  en the.last vali
141b0 64 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 70 61  d instance of pa
141c0 67 65 20 50 20 74 68 61 74 20 69 73 20 66 6f 6c  ge P that is fol
141d0 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69  lowed by a commi
141e0 74 20 66 72 61 6d 65 0a 6f 72 20 69 73 20 61 20  t frame.or is a 
141f0 63 6f 6d 6d 69 74 20 66 72 61 6d 65 20 69 74 73  commit frame its
14200 65 6c 66 20 62 65 63 6f 6d 65 73 20 74 68 65 20  elf becomes the 
14210 76 61 6c 75 65 20 72 65 61 64 2e 29 5e 20 20 5e  value read.)^  ^
14220 49 66 20 74 68 65 20 57 41 4c 0a 63 6f 6e 74 61  If the WAL.conta
14230 69 6e 73 20 6e 6f 20 63 6f 70 69 65 73 20 6f 66  ins no copies of
14240 20 70 61 67 65 20 50 20 74 68 61 74 20 61 72 65   page P that are
14250 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68   valid and which
14260 20 61 72 65 20 61 20 63 6f 6d 6d 69 74 0a 66 72   are a commit.fr
14270 61 6d 65 20 6f 72 20 61 72 65 20 66 6f 6c 6c 6f  ame or are follo
14280 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20  wed by a commit 
14290 66 72 61 6d 65 2c 20 74 68 65 6e 20 70 61 67 65  frame, then page
142a0 20 50 20 69 73 20 72 65 61 64 20 66 72 6f 6d 0a   P is read from.
142b0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
142c0 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74  e.</p>..<p>To st
142d0 61 72 74 20 61 20 72 65 61 64 20 74 72 61 6e 73  art a read trans
142e0 61 63 74 69 6f 6e 2c 20 74 68 65 20 72 65 61 64  action, the read
142f0 65 72 20 72 65 63 6f 72 64 73 20 74 68 65 20 69  er records the i
14300 6e 64 65 78 20 6f 66 20 74 68 65 20 6c 61 73 74  ndex of the last
14310 0a 76 61 6c 69 64 20 66 72 61 6d 65 20 69 6e 20  .valid frame in 
14320 74 68 65 20 57 41 4c 2e 20 20 54 68 65 20 72 65  the WAL.  The re
14330 61 64 65 72 20 75 73 65 73 20 74 68 69 73 20 72  ader uses this r
14340 65 63 6f 72 64 65 64 20 22 6d 78 46 72 61 6d 65  ecorded "mxFrame
14350 22 20 76 61 6c 75 65 0a 66 6f 72 20 61 6c 6c 20  " value.for all 
14360 73 75 62 73 65 71 75 65 6e 74 20 72 65 61 64 20  subsequent read 
14370 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 4e 65 77  operations.  New
14380 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61   transactions ca
14390 6e 20 62 65 20 61 70 70 65 6e 64 65 64 0a 74 6f  n be appended.to
143a0 20 74 68 65 20 57 41 4c 2c 20 62 75 74 20 61 73   the WAL, but as
143b0 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 72 65 61   long as the rea
143c0 64 65 72 20 75 73 65 73 20 69 74 73 20 6f 72 69  der uses its ori
143d0 67 69 6e 61 6c 20 6d 78 46 72 61 6d 65 20 76 61  ginal mxFrame va
143e0 6c 75 65 0a 61 6e 64 20 69 67 6e 6f 72 65 73 20  lue.and ignores 
143f0 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61 70 70  subsequently app
14400 65 6e 64 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74  ended content, t
14410 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 73  he reader will s
14420 65 65 20 61 20 0a 63 6f 6e 73 69 73 74 65 6e 74  ee a .consistent
14430 20 73 6e 61 70 73 68 6f 74 20 6f 66 20 74 68 65   snapshot of the
14440 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 61   database from a
14450 20 73 69 6e 67 6c 65 20 70 6f 69 6e 74 20 69 6e   single point in
14460 20 74 69 6d 65 2e 20 20 0a 5e 54 68 69 73 20 74   time.  .^This t
14470 65 63 68 6e 69 71 75 65 20 61 6c 6c 6f 77 73 20  echnique allows 
14480 6d 75 6c 74 69 70 6c 65 20 63 6f 6e 63 75 72 72  multiple concurr
14490 65 6e 74 20 72 65 61 64 65 72 73 20 74 6f 20 76  ent readers to v
144a0 69 65 77 20 64 69 66 66 65 72 65 6e 74 20 0a 76  iew different .v
144b0 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 64  ersions of the d
144c0 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 20  atabase content 
144d0 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c  simultaneously.<
144e0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 61 64  /p>..<p>The read
144f0 65 72 20 61 6c 67 6f 72 69 74 68 6d 20 69 6e 20  er algorithm in 
14500 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72  the previous par
14510 61 67 72 61 70 68 73 20 77 6f 72 6b 73 20 63 6f  agraphs works co
14520 72 72 65 63 74 6c 79 2c 20 62 75 74 20 0a 62 65  rrectly, but .be
14530 63 61 75 73 65 20 66 72 61 6d 65 73 20 66 6f 72  cause frames for
14540 20 70 61 67 65 20 50 20 63 61 6e 20 61 70 70 65   page P can appe
14550 61 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68  ar anywhere with
14560 69 6e 20 74 68 65 20 57 41 4c 2c 20 74 68 65 0a  in the WAL, the.
14570 72 65 61 64 65 72 20 68 61 73 20 74 6f 20 73 63  reader has to sc
14580 61 6e 20 74 68 65 20 65 6e 74 69 72 65 20 57 41  an the entire WA
14590 4c 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 70 61  L looking for pa
145a0 67 65 20 50 20 66 72 61 6d 65 73 2e 20 20 49 66  ge P frames.  If
145b0 20 74 68 65 0a 57 41 4c 20 69 73 20 6c 61 72 67   the.WAL is larg
145c0 65 20 28 6d 75 6c 74 69 70 6c 65 20 6d 65 67 61  e (multiple mega
145d0 62 79 74 65 73 20 69 73 20 74 79 70 69 63 61 6c  bytes is typical
145e0 29 20 74 68 61 74 20 73 63 61 6e 20 63 61 6e 20  ) that scan can 
145f0 62 65 20 73 6c 6f 77 2c 0a 61 6e 64 20 72 65 61  be slow,.and rea
14600 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 73 75  d performance su
14610 66 66 65 72 73 2e 20 20 5e 54 6f 20 6f 76 65 72  ffers.  ^To over
14620 63 6f 6d 65 20 74 68 69 73 20 70 72 6f 62 6c 65  come this proble
14630 6d 2c 20 61 20 73 65 70 61 72 61 74 65 0a 64 61  m, a separate.da
14640 74 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c  ta structure cal
14650 6c 65 64 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  led the wal-inde
14660 78 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20  x is maintained 
14670 74 6f 20 65 78 70 65 64 69 74 65 20 74 68 65 0a  to expedite the.
14680 73 65 61 72 63 68 20 66 6f 72 20 66 72 61 6d 65  search for frame
14690 73 20 6f 66 20 61 20 70 61 72 74 69 63 75 6c 61  s of a particula
146a0 72 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  r page.</p>..<tc
146b0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
146c0 6c 69 6e 64 65 78 66 6f 72 6d 61 74 20 7b 77 61  lindexformat {wa
146d0 6c 2d 69 6e 64 65 78 7d 20 7b 57 41 4c 2d 69 6e  l-index} {WAL-in
146e0 64 65 78 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c  dex format}</tcl
146f0 3e 0a 3c 68 33 3e 34 2e 35 20 57 41 4c 2d 49 6e  >.<h3>4.5 WAL-In
14700 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a  dex Format</h3>.
14710 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c 79  .<p>Conceptually
14720 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  , the wal-index 
14730 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  is shared memory
14740 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63 75 72  , though the cur
14750 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d 65  rent.VFS impleme
14760 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20 6d  ntations use a m
14770 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72 20  mapped file for 
14780 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20 20  the wal-index.  
14790 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69 6c  ^The mmapped.fil
147a0 65 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65  e is in the same
147b0 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68   directory as th
147c0 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68  e database and h
147d0 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
147e0 0a 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65  .as the database
147f0 20 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73 68   with a "<tt>-sh
14800 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20 61  m</tt>" suffix a
14810 70 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75 73  ppended.  Becaus
14820 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  e.the wal-index 
14830 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  is shared memory
14840 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
14850 74 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41 47  t support .[PRAG
14860 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  MA journal_mode 
14870 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57  | journal_mode=W
14880 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f 72  AL] .on a networ
14890 6b 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68 65  k filesystem whe
148a0 6e 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f 6e  n clients are on
148b0 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68 69   different machi
148c0 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20 6f  nes..All users o
148d0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d  f the database m
148e0 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73  ust be able to s
148f0 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d 65  hare the same me
14900 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mory.</p>..<p>Th
14910 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
14920 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 6f   wal-index is to
14930 20 61 6e 73 77 65 72 20 74 68 69 73 20 71 75 65   answer this que
14940 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f  stion quickly:</
14950 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
14960 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67 65  <i>.Given a page
14970 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61 20   number P and a 
14980 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61 6d  maximum WAL fram
14990 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75 72  e index M,.retur
149a0 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 57 41  n the largest WA
149b0 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66 6f  L frame index fo
149c0 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f  r page P that do
149d0 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2c  es not exceed M,
149e0 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c   .or return NULL
149f0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
14a00 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65   frames for page
14a10 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 65   P that do not e
14a20 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62  xceed M..</i></b
14a30 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
14a40 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75  he <i>M</i> valu
14a50 65 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  e in the previou
14a60 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 74  s paragraph is t
14a70 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c  he "mxFrame" val
14a80 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b 57  ue.defined in [W
14a90 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68  AL read algorith
14aa0 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34 5d  m | section 4.4]
14ab0 20 74 68 61 74 20 69 73 20 72 65 61 64 20 61 74   that is read at
14ac0 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20 61   the start .of a
14ad0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
14ae0 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 74   which defines t
14af0 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d 65  he maximum frame
14b00 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74 68   from the WAL th
14b10 61 74 20 0a 74 68 65 20 72 65 61 64 65 72 20 77  at .the reader w
14b20 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70  ill use.</p>..<p
14b30 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69  >The wal-index i
14b40 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41 66  s transient.  Af
14b50 74 65 72 20 61 20 63 72 61 73 68 2c 20 74 68 65  ter a crash, the
14b60 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72 65   wal-index is.re
14b70 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d  constructed from
14b80 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57 41   the original WA
14b90 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56 46  L file.  ^The VF
14ba0 53 20 69 73 20 72 65 71 75 69 72 65 64 0a 74 6f  S is required.to
14bb0 20 65 69 74 68 65 72 20 74 72 75 6e 63 61 74 65   either truncate
14bc0 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65 61   or zero the hea
14bd0 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  der of the wal-i
14be0 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c 61  ndex when the la
14bf0 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  st.connection to
14c00 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65 63   it closes.  Bec
14c10 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e 64  ause the wal-ind
14c20 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2c  ex is transient,
14c30 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20 61   it can.use an a
14c40 72 63 68 69 74 65 63 74 75 72 65 2d 73 70 65 63  rchitecture-spec
14c50 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74 20  ific format; it 
14c60 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
14c70 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66 6f   be cross-platfo
14c80 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69 6b  rm..Hence, unlik
14c90 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  e the database a
14ca0 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72 6d  nd WAL file form
14cb0 61 74 73 20 77 68 69 63 68 20 73 74 6f 72 65 20  ats which store 
14cc0 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62 69  all values.as bi
14cd0 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77 61  g endian, the wa
14ce0 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20 6d  l-index stores m
14cf0 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65 73  ulti-byte values
14d00 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a 62   in the native.b
14d10 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  yte order of the
14d20 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e 3c   host computer.<
14d30 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  /p>..<p>This doc
14d40 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72 6e  ument is concern
14d50 65 64 20 77 69 74 68 20 74 68 65 20 70 65 72 73  ed with the pers
14d60 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66 20  istent state of 
14d70 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  the database.fil
14d80 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68 65  e, and since the
14d90 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61 20   wal-index is a 
14da0 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63 74  transient struct
14db0 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72 20  ure, no further 
14dc0 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f  .information abo
14dd0 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
14de0 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 77   the wal-index w
14df0 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64 20  ill be provided 
14e00 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65 20 64  here..Complete d
14e10 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 66 6f  etails on the fo
14e20 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d  rmat of the wal-
14e30 69 6e 64 65 78 20 61 72 65 20 63 6f 6e 74 61 69  index are contai
14e40 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d 6d 65  ned within.comme
14e50 6e 74 73 20 69 6e 20 53 51 4c 69 74 65 20 73 6f  nts in SQLite so
14e60 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a     urce code.</p>.