Documentation Source Text

Hex Artifact Content
Login

Artifact a5b28a288e5cd6aee73630f41b676856568f8765:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c 65 74  ..<p>The complet
0140: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0150: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
0160: 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61 69 6e   usually.contain
0170: 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  ed a single file
0180: 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65 64 20   on disk called 
0190: 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61 62 61  the "main databa
01a0: 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c  se file".</p>..<
01b0: 70 3e 44 75 72 69 6e 67 20 61 20 74 72 61 6e 73  p>During a trans
01c0: 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20 73  action, SQLite s
01d0: 74 6f 72 65 73 20 61 64 64 69 74 69 6f 6e 61 6c  tores additional
01e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 0a 69 6e   information .in
01f0: 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65 20 63   a second file c
0200: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c 6c 62  alled the "rollb
0210: 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2c 20 6f 72  ack journal", or
0220: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
0230: 0a 5b 57 41 4c 20 6d 6f 64 65 5d 2c 20 61 20 77  .[WAL mode], a w
0240: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
0250: 69 6c 65 2e 0a 49 66 20 74 68 65 20 61 70 70 6c  ile..If the appl
0260: 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20  ication or.host 
0270: 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73  computer crashes
0280: 20 62 65 66 6f 72 65 20 74 68 65 20 74 72 61 6e   before the tran
0290: 73 61 63 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65  saction complete
02a0: 73 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c  s, then the roll
02b0: 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
02c0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
02d0: 63 6f 6e 74 61 69 6e 73 20 63 72 69 74 69 63 61  contains critica
02e0: 6c 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  l state informat
02f0: 69 6f 6e 20 6e 65 65 64 65 64 20 0a 74 6f 20 72  ion needed .to r
0300: 65 73 74 6f 72 65 20 74 68 65 20 6d 61 69 6e 20  estore the main 
0310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
0320: 20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   a consistent st
0330: 61 74 65 2e 20 20 57 68 65 6e 20 61 20 72 6f 6c  ate.  When a rol
0340: 6c 62 61 63 6b 20 0a 6a 6f 75 72 6e 61 6c 20 6f  lback .journal o
0350: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
0360: 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  g contains infor
0370: 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79  mation necessary
0380: 20 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20   for recovering 
0390: 0a 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68  .the state of th
03a0: 65 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 79  e database, they
03b0: 20 61 72 65 20 63 61 6c 6c 65 64 20 61 20 22 68   are called a "h
03c0: 6f 74 20 6a 6f 75 72 6e 61 6c 22 20 6f 72 20 22  ot journal" or "
03d0: 68 6f 74 20 57 41 4c 20 66 69 6c 65 22 2e 0a 48  hot WAL file"..H
03e0: 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 61 6e 64 20  ot journals and 
03f0: 57 41 4c 20 66 69 6c 65 73 20 61 72 65 20 6f 6e  WAL files are on
0400: 6c 79 20 61 20 66 61 63 74 6f 72 20 64 75 72 69  ly a factor duri
0410: 6e 67 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72  ng error recover
0420: 79 0a 73 63 65 6e 61 72 69 6f 73 20 61 6e 64 20  y.scenarios and 
0430: 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c  so are uncommon,
0440: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61   but they are pa
0450: 72 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20  rt of the state 
0460: 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74  of an SQLite.dat
0470: 61 62 61 73 65 20 61 6e 64 20 73 6f 20 63 61 6e  abase and so can
0480: 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20  not be ignored. 
0490: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64   This document d
04a0: 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
04b0: 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20  t.of a rollback 
04c0: 6a 6f 75 72 6e 61 6c 20 61 6e 64 20 74 68 65 20  journal and the 
04d0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
04e0: 66 69 6c 65 2c 20 62 75 74 20 74 68 65 20 66 6f  file, but the fo
04f0: 63 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d 61  cus is.on the ma
0500: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
0510: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20 50  .</p>..<h3>1.1 P
0520: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ages</h3>..<p>Th
0530: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
0540: 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  file consists of
0550: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67   one or more pag
0560: 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  es.  ^The size o
0570: 66 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f  f a.page is a po
0580: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
0590: 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36  en 512 and 65536
05a0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c   inclusive.  All
05b0: 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68   pages within.th
05c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
05d0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a  are the same siz
05e0: 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69  e.  ^The page si
05f0: 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ze for a databas
0600: 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d  e file.is determ
0610: 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79  ined by the 2-by
0620: 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74  te integer locat
0630: 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  ed at an offset 
0640: 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d  of.16 bytes from
0650: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0660: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
0670: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67  ile.</p>..<p>Pag
0680: 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20  es are numbered 
0690: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
06a0: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  .  The maximum p
06b0: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31  age number is.21
06c0: 34 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e  47483646 (2<sup>
06d0: 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c  <small>31</small
06e0: 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54  ></sup> - 2).  T
06f0: 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a  he minimum size.
0700: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0710: 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d  is a single 512-
0720: 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d  byte page..The m
0730: 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61  aximum size data
0740: 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31  base would be 21
0750: 34 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61  47483646 pages a
0760: 74 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65  t 65536 bytes pe
0770: 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33  r.page or 140,73
0780: 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79  7,488,224,256 by
0790: 74 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74  tes (about 140 t
07a0: 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61  erabytes).  Usua
07b0: 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  lly SQLite will.
07c0: 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  hit the maximum 
07d0: 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  file size limit 
07e0: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
07f0: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20  g filesystem or 
0800: 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69  disk.hardware si
0810: 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65  ze limit long be
0820: 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73  fore it hits its
0830: 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69   own internal si
0840: 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c  ze limit.</p>..<
0850: 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c  p>In common use,
0860: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
0870: 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20  s tend to range 
0880: 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66  in size from a f
0890: 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20  ew kilobytes.to 
08a0: 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e  a few gigabytes.
08b0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
08c0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
08d0: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
08e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
08f0: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
0900: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
0910: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
0920: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
0930: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
0940: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0950: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0960: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0970: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0980: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0990: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
09a0: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
09b0: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
09c0: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
09d0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
09e0: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
09f0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0a00: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0a10: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0a20: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0a30: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0a40: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0a50: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0a60: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72  .</p>..<p>^All r
0a70: 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72  eads from and wr
0a80: 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e  ites to the main
0a90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
0aa0: 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62  egin at a page.b
0ab0: 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20  oundary and all 
0ac0: 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e  writes are an in
0ad0: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
0ae0: 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20  pages in size.  
0af0: 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20  ^Reads.are also 
0b00: 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67  usually an integ
0b10: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  er number of pag
0b20: 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68  es in size, with
0b30: 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69   the one excepti
0b40: 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65  on.that when the
0b50: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
0b60: 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66  st opened, the f
0b70: 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f  irst 100 bytes o
0b80: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
0b90: 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73  ile (the databas
0ba0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61  e file header) a
0bb0: 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62  re read as a sub
0bc0: 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e  -page size unit.
0bd0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65  </p>..<p>^Before
0be0: 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   any information
0bf0: 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66  -bearing page of
0c00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0c10: 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20   modified, .the 
0c20: 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66  original unmodif
0c30: 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  ied content of t
0c40: 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74  hat page is writ
0c50: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f  ten into the .ro
0c60: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
0c70: 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   If a transactio
0c80: 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  n is interrupted
0c90: 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65   and needs to be
0ca0: 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74   .rolled back, t
0cb0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
0cc0: 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20  nal can then be 
0cd0: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
0ce0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
0cf0: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61  its original sta
0d00: 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c  te.  ^Freelist l
0d10: 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e  eaf pages bear n
0d20: 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  o.information th
0d30: 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f  at would need to
0d40: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20   be restored on 
0d50: 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  a rollback and s
0d60: 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77  o they.are not w
0d70: 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f  ritten to the jo
0d80: 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d  urnal prior to m
0d90: 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20  odification, in 
0da0: 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20  order to.reduce 
0db0: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
0dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0dd0: 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20  database_header 
0de0: 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72  {database header
0df0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20  }</tcl>.<h3>1.2 
0e00: 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61  The Database Hea
0e10: 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  der</h3>..<p>The
0e20: 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73   first 100 bytes
0e30: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0e40: 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74   file comprise t
0e50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0e60: 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64   .header.  The d
0e70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
0e80: 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69  der is divided i
0e90: 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68  nto fields as sh
0ea0: 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65  own by.the table
0eb0: 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c   below.  All mul
0ec0: 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e  tibyte fields in
0ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0ee0: 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74  le header are.st
0ef0: 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 6f  ored with the mo
0f00: 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  st significant b
0f10: 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65  yte first (big-e
0f20: 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65  ndian).</p>..<ce
0f30: 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73  nter>.<i>Databas
0f40: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
0f50: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
0f60: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
0f70: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
0f80: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
0f90: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
0fa0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fb0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
0fc0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
0fd0: 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c  =center>16<td al
0fe0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65  ign=left>.The he
0ff0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51  ader string: "SQ
1000: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30  Lite format 3\00
1010: 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0".<tr><td valig
1020: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1030: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
1040: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1050: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
1060: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70  >.The database p
1070: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
1080: 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f  s.  Must be a po
1090: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
10a0: 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38  en 512.and 32768
10b0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74   inclusive, or t
10c0: 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65  he value 1 repre
10d0: 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73  senting a page s
10e0: 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74  ize of 65536..<t
10f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1100: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38   align=center>18
1110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1130: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1140: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1150: 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c  ersion.  1 for l
1160: 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41  egacy; 2 for [WA
1170: 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  L]..<tr><td vali
1180: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1190: 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e  ter>19<td valign
11a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11b0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
11c0: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72  t>.File format r
11d0: 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ead version.  1 
11e0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
11f0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
1200: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1210: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
1220: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1230: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1240: 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66  n=left>.Bytes of
1250: 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65   unused "reserve
1260: 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20  d" space at the 
1270: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
1280: 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74  .  Usually 0..<t
1290: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31   align=center>21
12b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78   align=left>.Max
12e0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
12f0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
1300: 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72   Must be 64..<tr
1310: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c  align=center>22<
1330: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1340: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1350: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69  align=left>.Mini
1360: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
1370: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1380: 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e  Must be 32..<tr>
1390: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74  lign=center>23<t
13b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
13d0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20  lign=left>.Leaf 
13e0: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
13f0: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1420: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1430: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1440: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1450: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
1460: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
1470: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1480: 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
1490: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14a0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
14b0: 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61  >.Size of the da
14c0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
14d0: 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68  ages.  The "in-h
14e0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
14f0: 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ize"..<tr><td va
1500: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1510: 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69  enter>32<td vali
1520: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1530: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1540: 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72  eft>.Page number
1550: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
1560: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
1570: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1580: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1590: 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>36<td valign=
15a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
15b0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
15c0: 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  >.Total number o
15d0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
15e0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
15f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1600: 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>40<td valign=t
1610: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1620: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1630: 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .The schema cook
1640: 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ie..<tr><td vali
1650: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1660: 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e  ter>44<td valign
1670: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1680: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1690: 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  t>.The schema fo
16a0: 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75  rmat number.  Su
16b0: 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66  pported schema f
16c0: 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c  ormats are 1, 2,
16d0: 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c   3, and 4..<tr><
16e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64  ign=center>48<td
1700: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1710: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1720: 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c  ign=left>.Defaul
1730: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1740: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1750: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1760: 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>52<td valign=
1770: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1780: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1790: 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  >.The page numbe
17a0: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
17b0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
17c0: 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76  e when in auto-v
17d0: 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65  acuum or.increme
17e0: 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65  ntal-vacuum mode
17f0: 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72  s, or zero other
1800: 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  wise..<tr><td va
1810: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1820: 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69  enter>56<td vali
1830: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1840: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1850: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1860: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1870: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d    A value of 1 m
1880: 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76  eans UTF-8.  A v
1890: 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20  alue of 2.means 
18a0: 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c  UTF-16le.  A val
18b0: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
18c0: 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20  F-16be..<tr><td 
18d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18e0: 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61  =center>60<td va
18f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1900: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1910: 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72  =left>.The "user
1920: 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61   version" as rea
1930: 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65  d and set by the
1940: 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70   [user_version p
1950: 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20  ragma]..<tr><td 
1960: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1970: 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61  =center>64<td va
1980: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1990: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
19a0: 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e  =left>.True (non
19b0: 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65  -zero) for incre
19c0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
19d0: 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f  de.  False (zero
19e0: 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  ) otherwise..<tr
19f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1a00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c  align=center>68<
1a10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1a20: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a40: 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22  "Application ID"
1a50: 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41 20   set by [PRAGMA 
1a60: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 2e  application_id].
1a70: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1a80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1a90: 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >72<td valign=to
1aa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1ab0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
1ac0: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1ad0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1ae0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1af0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b00: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1b10: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1b20: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1b30: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1b40: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1b50: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><td v
1b60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b70: 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61 6c  center>96<td val
1b80: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b90: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1ba0: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1bb0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1bc0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1bd0: 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63  .<h4>1.2.1 Magic
1be0: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1bf0: 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h4>..<p>^Every v
1c00: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1c10: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1c20: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1c30: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1c40: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1c50: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1c60: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1c70: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1c80: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1c90: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1ca0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1cb0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1cc0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1cd0: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1ce0: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1cf0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32  .</p>..<h4>1.2.2
1d00: 20 50 61 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a   Page Size</h4>.
1d10: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1d20: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1d30: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1d40: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1d50: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1d60: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1d70: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1d80: 37 2e 30 2e 31 20 61 6e 64 20 65 61 72 6c 69 65  7.0.1 and earlie
1d90: 72 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  r, this value is
1da0: 20 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   .interpreted as
1db0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e   a big-endian in
1dc0: 74 65 67 65 72 20 61 6e 64 20 6d 75 73 74 20 62  teger and must b
1dd0: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1de0: 20 62 65 74 77 65 65 6e 0a 35 31 32 20 61 6e 64   between.512 and
1df0: 20 33 32 37 36 38 2c 20 69 6e 63 6c 75 73 69 76   32768, inclusiv
1e00: 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69  e.  Beginning wi
1e10: 74 68 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  th SQLite versio
1e20: 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a  n 3.7.1, a page.
1e30: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 20 62 79  size of 65536 by
1e40: 74 65 73 20 69 73 20 73 75 70 70 6f 72 74 65 64  tes is supported
1e50: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 36 35 35  .  The value 655
1e60: 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20  36 will not fit 
1e70: 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e  in a.two-byte in
1e80: 74 65 67 65 72 2c 20 73 6f 20 74 6f 20 73 70 65  teger, so to spe
1e90: 63 69 66 79 20 61 20 36 35 35 33 36 2d 62 79 74  cify a 65536-byt
1ea0: 65 20 70 61 67 65 20 73 69 7a 65 2c 20 74 68 65  e page size, the
1eb0: 20 76 61 6c 75 65 0a 61 74 20 6f 66 66 73 65 74   value.at offset
1ec0: 20 31 36 20 69 73 20 30 78 30 30 20 30 78 30 31   16 is 0x00 0x01
1ed0: 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  ..This value can
1ee0: 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1ef0: 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a  as a big-endian.
1f00: 31 20 61 6e 64 20 74 68 6f 75 67 68 74 20 6f 66  1 and thought of
1f10: 20 69 73 20 61 73 20 61 20 6d 61 67 69 63 20 6e   is as a magic n
1f20: 75 6d 62 65 72 20 74 6f 20 72 65 70 72 65 73 65  umber to represe
1f30: 6e 74 20 74 68 65 20 36 35 35 33 36 20 70 61 67  nt the 65536 pag
1f40: 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e 65 20 63  e size..Or one c
1f50: 61 6e 20 76 69 65 77 20 74 68 65 20 74 77 6f 2d  an view the two-
1f60: 62 79 74 65 20 66 69 65 6c 64 20 61 73 20 61 20  byte field as a 
1f70: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75  little endian nu
1f80: 6d 62 65 72 20 61 6e 64 20 73 61 79 0a 74 68 61  mber and say.tha
1f90: 74 20 69 74 20 72 65 70 72 65 73 65 6e 74 73 20  t it represents 
1fa0: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 64 69  the page size di
1fb0: 76 69 64 65 64 20 62 79 20 32 35 36 2e 20 20 54  vided by 256.  T
1fc0: 68 65 73 65 20 74 77 6f 20 0a 69 6e 74 65 72 70  hese two .interp
1fd0: 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  retations of the
1fe0: 20 70 61 67 65 2d 73 69 7a 65 20 66 69 65 6c 64   page-size field
1ff0: 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e   are equivalent.
2000: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20  </p>..<h4>1.2.3 
2010: 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
2020: 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e  ion numbers</h4>
2030: 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f  ..<p>The file fo
2040: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
2050: 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d  on and file form
2060: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20  at read version 
2070: 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e  at offsets.18 an
2080: 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65  d 19 are intende
2090: 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65  d to allow for e
20a0: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74  nhancements of t
20b0: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69  he file format.i
20c0: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
20d0: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e  s of SQLite.  In
20e0: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
20f0: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74  s of SQLite, bot
2100: 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65  h of.these value
2110: 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c  s are 1 for roll
2120: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67  back journalling
2130: 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72   modes and 2 for
2140: 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69   [WAL].journalli
2150: 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76  ng mode.  If a v
2160: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
2170: 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75   coded to the cu
2180: 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61  rrent.file forma
2190: 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  t specification 
21a0: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74  encounters a dat
21b0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65  abase file where
21c0: 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f   the read.versio
21d0: 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20  n is 1 or 2 but 
21e0: 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f  the write versio
21f0: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  n is greater tha
2200: 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61  n 2, then the da
2210: 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74  tabase.file must
2220: 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72   be treated as r
2230: 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20  ead-only.  If a 
2240: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69  database file wi
2250: 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f  th a read versio
2260: 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32  n.greater than 2
2270: 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
2280: 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61 62   then that datab
2290: 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ase cannot be re
22a0: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f  ad or written.</
22b0: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52 65  p>..<h4>1.2.4 Re
22c0: 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65 72  served bytes per
22d0: 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53   page</h4>..<p>S
22e0: 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61 62  QLite has the ab
22f0: 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73 69  ility to set asi
2300: 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65  de a small numbe
2310: 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65 73  r of extra bytes
2320: 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65   at.the end of e
2330: 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75 73  very page for us
2340: 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e  e by extensions.
2350: 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62 79    These extra by
2360: 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f  tes are.used, fo
2370: 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68  r example, by th
2380: 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74  e SQLite Encrypt
2390: 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f  ion Extension to
23a0: 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61   store a nonce.a
23b0: 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70  nd/or cryptograp
23c0: 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73  hic checksum ass
23d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
23e0: 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22  h page.  ^The ."
23f0: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22 20  reserved space" 
2400: 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79  size in the 1-by
2410: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
2420: 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20 6e  fset 20 is the n
2430: 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f  umber.of bytes o
2440: 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  f space at the e
2450: 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  nd of each page 
2460: 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20 65  to reserve for e
2470: 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20  xtensions..This 
2480: 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79  value is usually
2490: 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63   0.  The value c
24a0: 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a  an be odd.</p>..
24b0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
24c0: 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73   usable_size {us
24d0: 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e  able size}</tcl>
24e0: 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20  .<p>The "usable 
24f0: 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62  size" of a datab
2500: 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65 20  ase page is the 
2510: 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69 66  page size specif
2520: 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20  y by the.2-byte 
2530: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
2540: 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61 64  t 16 in the head
2550: 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65 73  er less the "res
2560: 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69 7a  erved" space siz
2570: 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68  e.recorded in th
2580: 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72  e 1-byte integer
2590: 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e   at offset 20 in
25a0: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
25b0: 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66  e usable.size of
25c0: 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62 65   a page might be
25d0: 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20   an odd number. 
25e0: 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20   ^(However, the 
25f0: 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e  usable size is n
2600: 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ot.allowed to be
2610: 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20   less than 480. 
2620: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2630: 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69 7a   if the page siz
2640: 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74  e is 512,.then t
2650: 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63  he reserved spac
2660: 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78  e size cannot ex
2670: 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a  ceed 32.)^</p>..
2680: 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f 61  <h4>1.2.5 Payloa
2690: 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34 3e  d fractions</h4>
26a0: 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
26b0: 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65 6d  m and minimum em
26c0: 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66  bedded payload f
26d0: 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68 65  ractions and the
26e0: 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66 72   leaf.payload fr
26f0: 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d 75  action values mu
2700: 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61 6e  st be 64, 32, an
2710: 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61 6c  d 32.  These val
2720: 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e 61  ues were.origina
2730: 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  lly intended to 
2740: 62 65 20 74 75 6e 61 62 6c 65 20 70 61 72 61 6d  be tunable param
2750: 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c 64  eters that could
2760: 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64 69   be used to.modi
2770: 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20 66  fy the storage f
2780: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d 74  ormat of the b-t
2790: 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20  ree algorithm.  
27a0: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66 75  However, that.fu
27b0: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 6e  nctionality is n
27c0: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e 64  ot supported and
27d0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63 75   there are no cu
27e0: 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20 61  rrent plans to a
27f0: 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74 68  dd.support in th
2800: 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63 65  e future.  Hence
2810: 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62 79  , these three by
2820: 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61 74  tes are fixed at
2830: 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65 63   the.values spec
2840: 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  ified.</p>..<h4>
2850: 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e 67  1.2.6 File chang
2860: 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a 0a  e counter</h4>..
2870: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2880: 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67 65   chngctr {change
2890: 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a   counter}</tcl>.
28a0: 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68 61  <p>^The file cha
28b0: 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61  nge counter is a
28c0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
28d0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66  an integer at.of
28e0: 66 73 65 74 20 32 34 20 74 68 61 74 20 69 73 20  fset 24 that is 
28f0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
2900: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
2910: 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f 63 6b  e file is unlock
2920: 65 64 0a 61 66 74 65 72 20 68 61 76 69 6e 67 20  ed.after having 
2930: 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e 0a 57  been modified..W
2940: 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  hen two or more 
2950: 70 72 6f 63 65 73 73 65 73 20 61 72 65 20 72 65  processes are re
2960: 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64  ading the same d
2970: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 65 61  atabase file, ea
2980: 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61 6e 20  ch .process can 
2990: 64 65 74 65 63 74 20 64 61 74 61 62 61 73 65 20  detect database 
29a0: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74 68  changes from oth
29b0: 65 72 20 70 72 6f 63 65 73 73 65 73 20 62 79 20  er processes by 
29c0: 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65 20  monitoring .the 
29d0: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a  change counter..
29e0: 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 6e  A process will n
29f0: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f 20  ormally want to 
2a00: 66 6c 75 73 68 20 69 74 73 20 64 61 74 61 62 61  flush its databa
2a10: 73 65 20 70 61 67 65 20 63 61 63 68 65 20 77 68  se page cache wh
2a20: 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  en.another proce
2a30: 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20  ss modified the 
2a40: 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63 65 20  database, since 
2a50: 74 68 65 20 63 61 63 68 65 20 68 61 73 20 62 65  the cache has be
2a60: 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65 20  come stale..The 
2a70: 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  file change coun
2a80: 74 65 72 20 66 61 63 69 6c 69 74 61 74 65 73 20  ter facilitates 
2a90: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  this.</p>..<p>In
2aa0: 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e 67   WAL mode, chang
2ab0: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
2ac0: 73 65 20 61 72 65 20 64 65 74 65 63 74 65 64 20  se are detected 
2ad0: 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d 69 6e  using the wal-in
2ae0: 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65 20 63  dex.and so the c
2af0: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2b00: 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 48 65   not needed.  He
2b10: 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67 65 20  nce, the change 
2b20: 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e 6f  counter might.no
2b30: 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  t be incremented
2b40: 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73 61 63   on each transac
2b50: 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64 65  tion in WAL mode
2b60: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 37  .</p>..<h4>1.2.7
2b70: 20 49 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   In-header datab
2b80: 61 73 65 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a 3c  ase size</h4>..<
2b90: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2ba0: 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d 68 65 61  filesize {in-hea
2bb0: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2bc0: 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  e}</tcl>.<p>^The
2bd0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
2be0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
2bf0: 66 73 65 74 20 32 38 20 69 6e 74 6f 20 74 68 65  fset 28 into the
2c00: 20 68 65 61 64 65 72 20 0a 73 74 6f 72 65 73 20   header .stores 
2c10: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
2c20: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e  database file in
2c30: 20 70 61 67 65 73 2e 20 20 5e 49 66 20 74 68 69   pages.  ^If thi
2c40: 73 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61  s in-header.data
2c50: 73 69 7a 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  size size is not
2c60: 20 76 61 6c 69 64 20 28 73 65 65 20 74 68 65 20   valid (see the 
2c70: 6e 65 78 74 20 70 61 72 61 67 72 61 70 68 29 2c  next paragraph),
2c80: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
2c90: 73 65 20 0a 73 69 7a 65 20 69 73 20 63 6f 6d 70  se .size is comp
2ca0: 75 74 65 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a  uted by looking.
2cb0: 61 74 20 74 68 65 20 61 63 74 75 61 6c 20 73 69  at the actual si
2cc0: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
2cd0: 73 65 20 66 69 6c 65 2e 20 4f 6c 64 65 72 20 76  se file. Older v
2ce0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2cf0: 65 0a 69 67 6e 6f 72 65 64 20 74 68 65 20 69 6e  e.ignored the in
2d00: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2d10: 20 73 69 7a 65 20 61 6e 64 20 75 73 65 64 20 74   size and used t
2d20: 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20 73  he actual file s
2d30: 69 7a 65 0a 65 78 63 6c 75 73 69 76 65 6c 79 2e  ize.exclusively.
2d40: 20 20 5e 4e 65 77 65 72 20 76 65 72 73 69 6f 6e    ^Newer version
2d50: 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 20  s of SQLite use 
2d60: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2d70: 74 61 62 61 73 65 0a 73 69 7a 65 20 69 66 20 69  tabase.size if i
2d80: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 62  t is available b
2d90: 75 74 20 66 61 6c 6c 20 62 61 63 6b 20 74 6f 20  ut fall back to 
2da0: 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20  the actual file 
2db0: 73 69 7a 65 20 69 66 0a 74 68 65 20 69 6e 2d 68  size if.the in-h
2dc0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2dd0: 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64  ize is not valid
2de0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69  .</p>..<p>^The i
2df0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2e00: 65 20 73 69 7a 65 20 69 73 20 6f 6e 6c 79 20 63  e size is only c
2e10: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
2e20: 76 61 6c 69 64 20 69 66 0a 69 74 20 69 73 20 6e  valid if.it is n
2e30: 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 69 66 20 74  on-zero and if t
2e40: 68 65 20 34 2d 62 79 74 65 20 5b 63 68 61 6e 67  he 4-byte [chang
2e50: 65 20 63 6f 75 6e 74 65 72 5d 20 61 74 20 6f 66  e counter] at of
2e60: 66 73 65 74 20 32 34 0a 65 78 61 63 74 6c 79 20  fset 24.exactly 
2e70: 6d 61 74 63 68 65 73 20 74 68 65 20 34 2d 62 79  matches the 4-by
2e80: 74 65 20 5b 76 65 72 73 69 6f 6e 2d 76 61 6c 69  te [version-vali
2e90: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d 20 61 74  d-for number] at
2ea0: 20 6f 66 66 73 65 74 20 39 32 2e 0a 5e 28 54 68   offset 92..^(Th
2eb0: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2ec0: 62 61 73 65 20 73 69 7a 65 20 69 73 20 61 6c 77  base size is alw
2ed0: 61 79 73 20 76 61 6c 69 64 20 0a 77 68 65 6e 20  ays valid .when 
2ee0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2ef0: 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64 20 75 73  only modified us
2f00: 69 6e 67 20 72 65 63 65 6e 74 20 76 65 72 73 69  ing recent versi
2f10: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 28 76  ons of SQLite.(v
2f20: 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 20 61 6e  ersions 3.7.0 an
2f30: 64 20 6c 61 74 65 72 29 2e 29 5e 0a 49 66 20 61  d later).)^.If a
2f40: 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 20   legacy version 
2f50: 6f 66 20 53 51 4c 69 74 65 20 77 72 69 74 65 73  of SQLite writes
2f60: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2f70: 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e  , it will not.kn
2f80: 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ow to update the
2f90: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2fa0: 61 73 65 20 73 69 7a 65 20 61 6e 64 20 73 6f 20  ase size and so 
2fb0: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 0a 64 61  the in-header.da
2fc0: 74 61 62 61 73 65 20 73 69 7a 65 20 63 6f 75 6c  tabase size coul
2fd0: 64 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  d be incorrect. 
2fe0: 20 42 75 74 20 6c 65 67 61 63 79 20 76 65 72 73   But legacy vers
2ff0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 77  ions of SQLite.w
3000: 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65 20 74  ill also leave t
3010: 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  he version-valid
3020: 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61 74 20 6f  -for number at o
3030: 66 66 73 65 74 20 39 32 20 75 6e 63 68 61 6e 67  ffset 92 unchang
3040: 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c 20 6e 6f  ed.so it will no
3050: 74 20 6d 61 74 63 68 20 74 68 65 20 63 68 61 6e  t match the chan
3060: 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20 48 65 6e  ge-counter.  Hen
3070: 63 65 2c 20 69 6e 76 61 6c 69 64 20 69 6e 2d 68  ce, invalid in-h
3080: 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20 73  eader.database s
3090: 69 7a 65 73 20 63 61 6e 20 62 65 20 64 65 74 65  izes can be dete
30a0: 63 74 65 64 20 28 61 6e 64 20 69 67 6e 6f 72 65  cted (and ignore
30b0: 64 29 20 62 79 20 6f 62 73 65 72 76 69 6e 67 20  d) by observing 
30c0: 77 68 65 6e 0a 74 68 65 20 63 68 61 6e 67 65 2d  when.the change-
30d0: 63 6f 75 6e 74 65 72 20 64 6f 65 73 20 6e 6f 74  counter does not
30e0: 20 6d 61 74 63 68 20 74 68 65 20 76 65 72 73 69   match the versi
30f0: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
3100: 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ber.</p>..<h4>1.
3110: 32 2e 38 20 46 72 65 65 20 70 61 67 65 20 6c 69  2.8 Free page li
3120: 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e 75 73  st</h4>..<p>Unus
3130: 65 64 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ed pages in the 
3140: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 72  database file ar
3150: 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 66 72  e stored on a fr
3160: 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a 34 2d  eelist.  ^The.4-
3170: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3180: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3190: 74 20 33 32 20 73 74 6f 72 65 73 20 74 68 65 20  t 32 stores the 
31a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 0a 74  page number of.t
31b0: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
31c0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c 20 6f   the freelist, o
31d0: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72  r zero if the fr
31e0: 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74 79 2e  eelist is empty.
31f0: 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  .^The 4-byte big
3200: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3210: 61 74 20 6f 66 66 73 65 74 20 33 36 20 73 74 6f  at offset 36 sto
3220: 72 65 73 20 73 74 6f 72 65 73 20 74 68 65 20 74  res stores the t
3230: 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f 66 20  otal .number of 
3240: 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66 72 65  pages on the fre
3250: 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  elist.</p>..<h4>
3260: 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 63 6f 6f  1.2.9 Schema coo
3270: 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68  kie</h4>..<p>^Th
3280: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3290: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
32a0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
32b0: 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61 74  t offset 40.that
32c0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
32d0: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
32e0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
32f0: 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61 72  nges.  A .prepar
3300: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
3310: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
3320: 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72 73   a specific vers
3330: 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ion of the.datab
3340: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 57 68 65  ase schema.  Whe
3350: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
3360: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
3370: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73  he statement.mus
3380: 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  t be reprepared.
3390: 20 20 5e 57 68 65 6e 20 61 20 70 72 65 70 61 72    ^When a prepar
33a0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  ed statement run
33b0: 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65 63  s, it first chec
33c0: 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks.the schema co
33d0: 6f 6b 69 65 20 74 6f 20 65 6e 73 75 72 65 20 74  okie to ensure t
33e0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  he value is the 
33f0: 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65  same as when the
3400: 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70   statement.was p
3410: 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20 74  repared and if t
3420: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
3430: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68   has changed, th
3440: 65 20 73 74 61 74 65 6d 65 6e 74 20 65 69 74 68  e statement eith
3450: 65 72 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er.automatically
3460: 20 72 65 70 72 65 70 61 72 65 73 20 61 6e 64 20   reprepares and 
3470: 72 65 72 75 6e 73 20 6f 72 20 69 74 20 61 62 6f  reruns or it abo
3480: 72 74 73 20 77 69 74 68 20 61 6e 20 5b 53 51 4c  rts with an [SQL
3490: 49 54 45 5f 53 43 48 45 4d 41 5d 20 0a 65 72 72  ITE_SCHEMA] .err
34a0: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
34b0: 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d  _fragment {schem
34c0: 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61  aformat} {schema
34d0: 20 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61   format} {schema
34e0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c   format number}<
34f0: 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 30  /tcl>.<h4>1.2.10
3500: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   Schema format n
3510: 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  umber</h4>..<p>T
3520: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
3530: 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34 2d 62   number is a 4-b
3540: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3550: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3560: 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d 61 20   44..The schema 
3570: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73  format number is
3580: 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
3590: 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65 61 64  file format read
35a0: 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72 73 69   and write.versi
35b0: 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20 6f 66  on numbers at of
35c0: 66 73 65 74 73 20 31 38 20 61 6e 64 20 31 39 20  fsets 18 and 19 
35d0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
35e0: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
35f0: 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f 20 74  mber.refers to t
3600: 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20 53 51  he high-level SQ
3610: 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72 61 74  L formatting rat
3620: 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 6f 77  her than the low
3630: 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f  -level b-tree.fo
3640: 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75 72 20  rmatting.  Four 
3650: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
3660: 6d 62 65 72 73 20 61 72 65 20 63 75 72 72 65 6e  mbers are curren
3670: 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e  tly defined:</p>
3680: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65  ..<ol>.<li value
3690: 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73 20 75  =1>Format 1 is u
36a0: 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c  nderstood by all
36b0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
36c0: 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65 72 73  ite back to.vers
36d0: 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e 0a  ion 3.0.0.</li>.
36e0: 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d  <li value=2>Form
36f0: 61 74 20 32 20 61 64 64 73 20 74 68 65 20 61 62  at 2 adds the ab
3700: 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20 77 69  ility of rows wi
3710: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 61  thin the same ta
3720: 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20 76 61  ble.to have a va
3730: 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20  rying number of 
3740: 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65  columns, in orde
3750: 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65  r to support the
3760: 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20  .[ALTER TABLE | 
3770: 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20  ALTER TABLE ... 
3780: 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63  ADD COLUMN] func
3790: 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75 70 70  tionality.  Supp
37a0: 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e 67 20  ort for.reading 
37b0: 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f 72 6d  and writing form
37c0: 61 74 20 32 20 77 61 73 20 61 64 64 65 64 20 69  at 2 was added i
37d0: 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  n SQLite version
37e0: 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30 35 2d   3.1.3 .on 2005-
37f0: 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20  02-19.</li>.<li 
3800: 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33  value=3>Format 3
3810: 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69 74   adds the abilit
3820: 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c 75 6d  y of extra colum
3830: 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41 4c 54  ns added by.[ALT
3840: 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52  ER TABLE | ALTER
3850: 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43   TABLE ... ADD C
3860: 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e  OLUMN] to have n
3870: 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a  on-NULL default.
3880: 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20 63 61  values.  This ca
3890: 70 61 62 69 6c 69 74 79 20 77 61 73 20 61 64 64  pability was add
38a0: 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ed in SQLite ver
38b0: 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e 20 32  sion 3.1.4 .on 2
38c0: 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69 3e 0a  005-03-11.</li>.
38d0: 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46 6f 72  <li value=4>^For
38e0: 6d 61 74 20 34 20 63 61 75 73 65 73 20 53 51 4c  mat 4 causes SQL
38f0: 69 74 65 20 74 6f 20 72 65 73 70 65 63 74 20 74  ite to respect t
3900: 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e 67 20 69  he.[descending i
3910: 6e 64 65 78 65 73 20 7c 20 44 45 53 43 20 6b 65  ndexes | DESC ke
3920: 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65 78 20  yword] on.index 
3930: 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20 28  declarations.  (
3940: 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72  ^The DESC keywor
3950: 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20  d is ignored in 
3960: 69 6e 64 65 78 65 73 20 66 6f 72 20 0a 66 6f 72  indexes for .for
3970: 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64 20 33  mats 1, 2, and 3
3980: 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61 6c 73  .).^Format 4 als
3990: 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77 20 62  o adds two new b
39a0: 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20 74 79  oolean record ty
39b0: 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65 72 69  pe values ([seri
39c0: 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e 64 20  al types].8 and 
39d0: 39 29 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72  9).  Support for
39e0: 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20 61 64   format 4 was ad
39f0: 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 33 2e  ded in SQLite 3.
3a00: 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31  3.0 on.2006-01-1
3a10: 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c  0.</li>.</ol>..<
3a20: 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73 65 20  p>^New database 
3a30: 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62 79  files created by
3a40: 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f 72 6d   SQLite use form
3a50: 61 74 20 34 20 62 79 20 64 65 66 61 75 6c 74 2e  at 4 by default.
3a60: 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69  .^The [legacy_fi
3a70: 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61  le_format pragma
3a80: 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ] can be used to
3a90: 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a 74 6f   cause SQLite.to
3aa0: 20 63 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   create new data
3ab0: 62 61 73 65 20 66 69 6c 65 73 20 75 73 69 6e 67  base files using
3ac0: 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68 65 20 66   format 1..The f
3ad0: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75  ormat version nu
3ae0: 6d 62 65 72 20 63 61 6e 20 62 65 20 6d 61 64 65  mber can be made
3af0: 20 74 6f 20 64 65 66 61 75 6c 74 20 74 6f 20 31   to default to 1
3b00: 20 69 6e 73 74 65 61 64 20 6f 66 20 34 20 62 79   instead of 4 by
3b10: 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c 49 54 45  .setting [SQLITE
3b20: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3b30: 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f 6d 70 69  RMAT]=1 at compi
3b40: 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le-time..</p>..<
3b50: 68 34 3e 31 2e 32 2e 31 31 20 53 75 67 67 65 73  h4>1.2.11 Sugges
3b60: 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 3c 2f  ted cache size</
3b70: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79  h4>..<p>The 4-by
3b80: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 69  te big-endian si
3b90: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74 20  gned integer at 
3ba0: 6f 66 66 73 65 74 20 34 38 20 69 73 20 74 68 65  offset 48 is the
3bb0: 20 73 75 67 67 65 73 74 65 64 0a 63 61 63 68 65   suggested.cache
3bc0: 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73 20 66   size in pages f
3bd0: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
3be0: 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c 75 65  file.  The value
3bf0: 20 69 73 20 61 20 73 75 67 67 65 73 74 69 6f 6e   is a suggestion
3c00: 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74 65  .only and SQLite
3c10: 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c   is under no obl
3c20: 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72  igation to honor
3c30: 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f 6c 75   it.  The absolu
3c40: 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68 65 20  te value.of the 
3c50: 69 6e 74 65 67 65 72 20 69 73 20 75 73 65 64 20  integer is used 
3c60: 61 73 20 74 68 65 20 73 75 67 67 65 73 74 65 64  as the suggested
3c70: 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75 67 67   size.  The sugg
3c80: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3c90: 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73 69 6e  .can be set usin
3ca0: 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74 5f 63  g the [default_c
3cb0: 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  ache_size pragma
3cc0: 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  ].</p>..<h4>1.2.
3cd0: 31 32 20 49 6e 63 72 65 6d 65 6e 74 61 6c 20 76  12 Incremental v
3ce0: 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73 3c 2f  acuum settings</
3cf0: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 20  h4>..<p>The two 
3d00: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3d10: 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20 6f 66  n integers at of
3d20: 66 73 65 74 73 20 35 32 20 61 6e 64 20 36 34 20  fsets 52 and 64 
3d30: 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61 6e 61  are used.to mana
3d40: 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63  ge the [auto_vac
3d50: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
3d60: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
3d70: 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e  des.  ^If.the in
3d80: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3d90: 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 20  52 is zero then 
3da0: 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70 74 72  pointer-map (ptr
3db0: 6d 61 70 29 20 70 61 67 65 73 20 61 72 65 0a 6f  map) pages are.o
3dc0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
3dd0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
3de0: 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f 5f 76  d neither auto_v
3df0: 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d  acuum nor.increm
3e00: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 72 65  ental_vacuum are
3e10: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e 49 66   supported.  ^If
3e20: 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
3e30: 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e  offset 52 is.non
3e40: 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20 69 73  -zero then it is
3e50: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
3e60: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
3e70: 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
3e80: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20  .database file, 
3e90: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3ea0: 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 70  e will contain p
3eb0: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3ec0: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3ed0: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3ee0: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
3ef0: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e  tal_vacuum.  ^In
3f00: 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73   this latter.cas
3f10: 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  e, the integer a
3f20: 74 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74  t offset 64 is t
3f30: 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e  rue for incremen
3f40: 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66  tal_vacuum and.f
3f50: 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61  alse for auto_va
3f60: 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65 20 69  cuum.  ^If the i
3f70: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3f80: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
3f90: 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20  .the integer at 
3fa0: 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74 20 61  offset 64 must a
3fb0: 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e  lso be zero.</p>
3fc0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
3fd0: 6e 74 20 65 6e 63 20 7b 74 65 78 74 20 65 6e 63  nt enc {text enc
3fe0: 6f 64 69 6e 67 7d 3c 2f 74 63 6c 3e 0a 3c 68 34  oding}</tcl>.<h4
3ff0: 3e 31 2e 32 2e 31 33 20 54 65 78 74 20 65 6e 63  >1.2.13 Text enc
4000: 6f 64 69 6e 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e  oding</h4>..<p>^
4010: 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65  The 4-byte big-e
4020: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
4030: 20 6f 66 66 73 65 74 20 35 36 20 64 65 74 65 72   offset 56 deter
4040: 6d 69 6e 65 73 20 74 68 65 20 65 6e 63 6f 64 69  mines the encodi
4050: 6e 67 0a 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  ng.used for all 
4060: 74 65 78 74 20 73 74 72 69 6e 67 73 20 73 74 6f  text strings sto
4070: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
4080: 61 73 65 2e 20 20 0a 5e 41 20 76 61 6c 75 65 20  ase.  .^A value 
4090: 6f 66 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38  of 1 means UTF-8
40a0: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20  ..^A value of 2 
40b0: 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 0a  means UTF-16le..
40c0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65  ^A value of 3 me
40d0: 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f  ans UTF-16be..No
40e0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72   other values ar
40f0: 65 20 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54 68 65  e allowed..^(The
4100: 20 73 71 6c 69 74 65 33 2e 68 20 68 65 61 64 65   sqlite3.h heade
4110: 72 20 66 69 6c 65 20 64 65 66 69 6e 65 73 20 43  r file defines C
4120: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
4130: 63 72 6f 73 20 53 51 4c 49 54 45 5f 55 54 46 38  cros SQLITE_UTF8
4140: 20 61 73 20 31 2c 0a 53 51 4c 49 54 45 5f 55 54   as 1,.SQLITE_UT
4150: 46 31 36 4c 45 20 61 73 20 32 2c 20 61 6e 64 20  F16LE as 2, and 
4160: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 61  SQLITE_UTF16BE a
4170: 73 20 33 2c 20 74 6f 20 75 73 65 20 69 6e 20 70  s 3, to use in p
4180: 6c 61 63 65 20 6f 66 0a 74 68 65 20 6e 75 6d 65  lace of.the nume
4190: 72 69 63 20 63 6f 64 65 73 20 66 6f 72 20 74 68  ric codes for th
41a0: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
41b0: 29 5e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  )^</p>..<h4>1.2.
41c0: 31 34 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20  14 User version 
41d0: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
41e0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
41f0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
4200: 74 20 6f 66 66 73 65 74 20 36 30 20 69 73 20 74  t offset 60 is t
4210: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
4220: 77 68 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64  which.is set and
4230: 20 71 75 65 72 69 65 64 20 62 79 20 74 68 65 20   queried by the 
4240: 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72  [user_version pr
4250: 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72  agma].  The user
4260: 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20   version is.not 
4270: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c  used by SQLite.<
4280: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4290: 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41 70 70  gment appid {App
42a0: 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63  lication ID}</tc
42b0: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20 41 70  l>.<h4>1.2.15 Ap
42c0: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 34  plication ID</h4
42d0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
42e0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
42f0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
4300: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4310: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
4320: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
4330: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
4340: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
4350: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
4360: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
4370: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
4380: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4390: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
43a0: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
43b0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
43c0: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
43d0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
43e0: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
43f0: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
4400: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4410: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
4420: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
4430: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
4440: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
4450: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
4460: 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65 72  ile(1)] to deter
4470: 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69  mine the specifi
4480: 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74 68  c.file type rath
4490: 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65 70  er than just rep
44a0: 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33 20  orting "SQLite3 
44b0: 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c 69  Database".  A li
44c0: 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20 61  st of.assigned a
44d0: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63  pplication IDs c
44e0: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
44f0: 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74  nsulting the.[ht
4500: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
4510: 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74  org/src/artifact
4520: 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61  ?ci=trunk&filena
4530: 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67  me=magic.txt|mag
4540: 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20  ic.txt].file in 
4550: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
4560: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70  e repository.</p
4570: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4580: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
4590: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
45a0: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
45b0: 34 3e 31 2e 32 2e 31 36 20 57 72 69 74 65 20 6c  4>1.2.16 Write l
45c0: 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e  ibrary version n
45d0: 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f  umber and versio
45e0: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
45f0: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h4>..<p>^The
4600: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4610: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4620: 66 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74  fset 96 stores t
4630: 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53  he .[SQLITE_VERS
4640: 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75  ION_NUMBER] valu
4650: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  e for the SQLite
4660: 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f   library that mo
4670: 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69  st.recently modi
4680: 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73  fied the databas
4690: 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d  e file.  ^The 4-
46a0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
46b0: 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65  integer at.offse
46c0: 74 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75  t 92 is the valu
46d0: 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65  e of the [change
46e0: 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74   counter] when t
46f0: 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  he version numbe
4700: 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54  r.was stored.  T
4710: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
4720: 66 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65  fset 92 indicate
4730: 73 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74  s which transact
4740: 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20  ion.the version 
4750: 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20  number is valid 
4760: 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74  for and is somet
4770: 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a  imes called the.
4780: 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  "version-valid-f
4790: 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34  or number"...<h4
47a0: 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73  >1.2.16 Header s
47b0: 70 61 63 65 20 72 65 73 65 72 76 65 64 20 66 6f  pace reserved fo
47c0: 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e  r expansion</h4>
47d0: 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62  ..<p>All other b
47e0: 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ytes of the data
47f0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
4800: 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f   are reserved fo
4810: 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73 69  r.future expansi
4820: 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73  on and must be s
4830: 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a  et to zero.</p>.
4840: 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63  .<h3>1.3 The Loc
4850: 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e  k-Byte Page</h3>
4860: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
4870: 74 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73  te page is the s
4880: 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68  ingle page of th
4890: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
48a0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
48b0: 65 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  e bytes at offse
48c0: 74 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37  ts between 10737
48d0: 34 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34  41824 and 107374
48e0: 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e  2335,.inclusive.
48f0: 20 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c    A database fil
4900: 65 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74  e that is less t
4910: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
4920: 31 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73  1073741824 bytes
4930: 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69   .in size contai
4940: 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20  ns no lock-byte 
4950: 70 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73  page.  A databas
4960: 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68  e file larger th
4970: 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f  an.1073741824 co
4980: 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f  ntains exactly o
4990: 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  ne lock-byte pag
49a0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  e..</p>..<p>The 
49b0: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
49c0: 73 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20  s set aside for 
49d0: 75 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61  use by the opera
49e0: 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63  ting-system spec
49f0: 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65  ific.[VFS] imple
4a00: 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70  mentation in imp
4a10: 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61  lementing the da
4a20: 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b  tabase file lock
4a30: 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a  ing primitives..
4a40: 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74  ^SQLite does not
4a50: 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79   use the lock-by
4a60: 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53  te page.  ^The S
4a70: 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c  QLite core .will
4a80: 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77   never read or w
4a90: 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79  rite the lock-by
4aa0: 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20  te page,.though 
4ab0: 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d  operating-system
4ac0: 20 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20   specific [VFS] 
4ad0: 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73  .implementations
4ae0: 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72   may choose to r
4af0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74  ead or write byt
4b00: 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62  es on the lock-b
4b10: 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64  yte .page accord
4b20: 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64  ing to the .need
4b30: 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69  s and procliviti
4b40: 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c  es of the underl
4b50: 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68  ying system.  Th
4b60: 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32  e unix and win32
4b70: 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74  .[VFS] implement
4b80: 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65  ations that come
4b90: 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69   built into SQLi
4ba0: 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20  te do not write 
4bb0: 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65  to the.lock-byte
4bc0: 20 70 61 67 65 2c 20 62 75 74 20 74 68 69 72 64   page, but third
4bd0: 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65  -party VFS imple
4be0: 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f  mentations for.o
4bf0: 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73  ther operating s
4c00: 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70  ystems might.</p
4c10: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4c20: 65 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b  ent {freelist} {
4c30: 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d  freelist} {free-
4c40: 70 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e  page list}</tcl>
4c50: 0a 3c 68 33 3e 31 2e 34 20 54 68 65 20 46 72 65  .<h3>1.4 The Fre
4c60: 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  elist</h3>..<p>A
4c70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
4c80: 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65  ight contain one
4c90: 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74   or more pages t
4ca0: 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61  hat are not in.a
4cb0: 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73  ctive use.  Unus
4cc0: 65 64 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d  ed pages can com
4cd0: 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61  e about, for exa
4ce0: 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72  mple, when infor
4cf0: 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65  mation.is delete
4d00: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
4d10: 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  ase.  Unused pag
4d20: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  es are stored on
4d30: 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e   the freelist.an
4d40: 64 20 61 72 65 20 72 65 75 73 65 64 20 77 68 65  d are reused whe
4d50: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67  n additional pag
4d60: 65 73 20 61 72 65 20 72 65 71 75 69 72 65 64 2e  es are required.
4d70: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65  </p>..<p>The fre
4d80: 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a  elist is organiz
4d90: 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c  ed as a linked l
4da0: 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20  ist of freelist 
4db0: 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68  trunk pages.with
4dc0: 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65   each trunk page
4dd0: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67  s containing pag
4de0: 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65  e numbers for ze
4df0: 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c  ro or more freel
4e00: 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c  ist.leaf pages.<
4e10: 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69  /p>..<p>A freeli
4e20: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f  st trunk page co
4e30: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
4e40: 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67  ay of 4-byte big
4e50: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73  -endian integers
4e60: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
4e70: 65 20 61 72 72 61 79 20 69 73 20 61 73 20 6d 61  e array is as ma
4e80: 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73 20 77  ny integers as w
4e90: 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75  ill fit in the u
4ea0: 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61  sable space.of a
4eb0: 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69   page.  The mini
4ec0: 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65  mum usable space
4ed0: 20 69 73 20 34 38 30 20 62 79 74 65 73 20 73 6f   is 480 bytes so
4ee0: 20 74 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20   the array will 
4ef0: 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61  always.be at lea
4f00: 73 74 20 31 32 30 20 65 6e 74 72 69 65 73 20 69  st 120 entries i
4f10: 6e 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20  n length.  ^The 
4f20: 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 6f 6e  first integer on
4f30: 20 61 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e   a freelist trun
4f40: 6b 0a 70 61 67 65 20 69 73 20 74 68 65 20 70 61  k.page is the pa
4f50: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
4f60: 20 6e 65 78 74 20 66 72 65 65 6c 69 73 74 20 74   next freelist t
4f70: 72 75 6e 6b 20 70 61 67 65 20 69 6e 20 74 68 65  runk page in the
4f80: 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f 20 0a 69   list or zero .i
4f90: 66 20 74 68 69 73 20 69 73 20 74 68 65 20 6c 61  f this is the la
4fa0: 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  st freelist trun
4fb0: 6b 20 70 61 67 65 2e 20 20 5e 54 68 65 20 73 65  k page.  ^The se
4fc0: 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 6f 6e 20  cond integer on 
4fd0: 61 20 66 72 65 65 6c 69 73 74 0a 74 72 75 6e 6b  a freelist.trunk
4fe0: 20 70 61 67 65 20 69 73 20 74 68 65 20 6e 75 6d   page is the num
4ff0: 62 65 72 20 6f 66 20 6c 65 61 66 20 70 61 67 65  ber of leaf page
5000: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c   pointers to fol
5010: 6c 6f 77 2e 20 20 0a 5e 28 43 61 6c 6c 20 74 68  low.  .^(Call th
5020: 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72  e second integer
5030: 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 20 74   on a freelist t
5040: 72 75 6e 6b 20 70 61 67 65 20 4c 2e 0a 49 66 20  runk page L..If 
5050: 4c 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  L is greater tha
5060: 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74 65  n zero then inte
5070: 67 65 72 73 20 77 69 74 68 20 61 72 72 61 79 20  gers with array 
5080: 69 6e 64 65 78 65 73 20 62 65 74 77 65 65 6e 20  indexes between 
5090: 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73  2 and.L+1 inclus
50a0: 69 76 65 20 63 6f 6e 74 61 69 6e 20 70 61 67 65  ive contain page
50b0: 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 66 72 65   numbers for fre
50c0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
50d0: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65  .)^</p>..<p>Free
50e0: 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20  list leaf pages 
50f0: 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72  contain no infor
5100: 6d 61 74 69 6f 6e 2e 20 20 5e 53 51 4c 69 74 65  mation.  ^SQLite
5110: 20 61 76 6f 69 64 73 20 72 65 61 64 69 6e 67 20   avoids reading 
5120: 6f 72 0a 77 72 69 74 69 6e 67 20 66 72 65 65 6c  or.writing freel
5130: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 69  ist leaf pages i
5140: 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64 75 63  n order to reduc
5150: 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a  e disk I/O.</p>.
5160: 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20 53 51 4c  .<p>A bug in SQL
5170: 69 74 65 20 76 65 72 73 69 6f 6e 73 20 70 72 69  ite versions pri
5180: 6f 72 20 74 6f 20 33 2e 36 2e 30 20 63 61 75 73  or to 3.6.0 caus
5190: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
51a0: 74 6f 20 62 65 0a 72 65 70 6f 72 74 65 64 20 61  to be.reported a
51b0: 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79  s corrupt if any
51c0: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 36 20 65   of the last 6 e
51d0: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 66 72  ntries in the fr
51e0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
51f0: 65 20 0a 61 72 72 61 79 20 63 6f 6e 74 61 69 6e  e .array contain
5200: 65 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75  ed non-zero valu
5210: 65 73 2e 20 20 4e 65 77 65 72 20 76 65 72 73 69  es.  Newer versi
5220: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 64 6f  ons of SQLite do
5230: 20 6e 6f 74 20 68 61 76 65 0a 74 68 69 73 20 70   not have.this p
5240: 72 6f 62 6c 65 6d 2e 20 20 5e 48 6f 77 65 76 65  roblem.  ^Howeve
5250: 72 2c 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e  r, newer version
5260: 73 20 6f 66 20 53 51 4c 69 74 65 20 73 74 69 6c  s of SQLite stil
5270: 6c 20 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68  l avoid using th
5280: 65 20 0a 6c 61 73 74 20 73 69 78 20 65 6e 74 72  e .last six entr
5290: 69 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c  ies in the freel
52a0: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 61  ist trunk page a
52b0: 72 72 61 79 20 69 6e 20 6f 72 64 65 72 20 74 68  rray in order th
52c0: 61 74 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  at database.file
52d0: 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77  s created by new
52e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
52f0: 51 4c 69 74 65 20 63 61 6e 20 62 65 20 72 65 61  QLite can be rea
5300: 64 20 62 79 20 6f 6c 64 65 72 20 76 65 72 73 69  d by older versi
5310: 6f 6e 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ons.of SQLite.</
5320: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  p>..<p>^The numb
5330: 65 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70  er of freelist p
5340: 61 67 65 73 20 69 73 20 73 74 6f 72 65 64 20 61  ages is stored a
5350: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
5360: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e  ndian integer.in
5370: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
5380: 61 64 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65  ader at an offse
5390: 74 20 6f 66 20 33 36 20 66 72 6f 6d 20 74 68 65  t of 36 from the
53a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
53b0: 65 20 66 69 6c 65 2e 0a 5e 54 68 65 20 64 61 74  e file..^The dat
53c0: 61 62 61 73 65 20 68 65 61 64 65 72 20 61 6c 73  abase header als
53d0: 6f 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  o stores the pag
53e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
53f0: 66 69 72 73 74 20 66 72 65 65 6c 69 73 74 20 74  first freelist t
5400: 72 75 6e 6b 0a 70 61 67 65 20 61 73 20 61 20 34  runk.page as a 4
5410: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
5420: 20 69 6e 74 65 67 65 72 20 61 74 20 61 6e 20 6f   integer at an o
5430: 66 66 73 65 74 20 6f 66 20 33 32 20 66 72 6f 6d  ffset of 32 from
5440: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f   the beginning.o
5450: 66 20 74 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  f the file.</p>.
5460: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
5470: 74 20 62 74 72 65 65 20 7b 42 2a 2d 54 72 65 65  t btree {B*-Tree
5480: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 35  s}</tcl>.<h3>1.5
5490: 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68   B-tree Pages</h
54a0: 33 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65  3>..<p>The b-tre
54b0: 65 20 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76  e algorithm prov
54c0: 69 64 65 73 20 6b 65 79 2f 64 61 74 61 20 73 74  ides key/data st
54d0: 6f 72 61 67 65 20 77 69 74 68 20 75 6e 69 71 75  orage with uniqu
54e0: 65 20 61 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65  e and.ordered ke
54f0: 79 73 20 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e  ys on page-orien
5500: 74 65 64 20 73 74 6f 72 61 67 65 20 64 65 76 69  ted storage devi
5510: 63 65 73 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f  ces..For backgro
5520: 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
5530: 6f 6e 20 62 2d 74 72 65 65 73 2c 20 73 65 65 0a  on b-trees, see.
5540: 4b 6e 75 74 68 2c 20 3c 75 3e 54 68 65 20 41 72  Knuth, <u>The Ar
5550: 74 20 4f 66 20 43 6f 6d 70 75 74 65 72 20 50 72  t Of Computer Pr
5560: 6f 67 72 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56  ogramming</u>, V
5570: 6f 6c 75 6d 65 20 33 20 22 53 6f 72 74 69 6e 67  olume 3 "Sorting
5580: 0a 61 6e 64 20 53 65 61 72 63 68 69 6e 67 22 2c  .and Searching",
5590: 20 70 61 67 65 73 20 34 37 31 2d 34 37 39 2e 20   pages 471-479. 
55a0: 20 54 77 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d   Two kinds of b-
55b0: 74 72 65 65 73 20 61 72 65 20 75 73 65 64 20 62  trees are used b
55c0: 79 0a 53 51 4c 69 74 65 2e 20 20 54 68 65 20 61  y.SQLite.  The a
55d0: 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e  lgorithm that Kn
55e0: 75 74 68 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72  uth calls "B*-Tr
55f0: 65 65 22 20 73 74 6f 72 65 73 20 61 6c 6c 20 64  ee" stores all d
5600: 61 74 61 0a 69 6e 20 74 68 65 20 6c 65 61 76 65  ata.in the leave
5610: 73 20 6f 66 20 74 68 65 20 74 72 65 65 2e 20 20  s of the tree.  
5620: 53 51 4c 69 74 65 20 63 61 6c 6c 73 20 74 68 69  SQLite calls thi
5630: 73 20 76 61 72 69 65 74 79 20 6f 66 20 62 2d 74  s variety of b-t
5640: 72 65 65 0a 61 20 22 74 61 62 6c 65 20 62 2d 74  ree.a "table b-t
5650: 72 65 65 22 2e 20 54 68 65 20 61 6c 67 6f 72 69  ree". The algori
5660: 74 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63  thm that Knuth c
5670: 61 6c 6c 73 20 73 69 6d 70 6c 79 20 22 42 2d 54  alls simply "B-T
5680: 72 65 65 22 0a 73 74 6f 72 65 73 20 62 6f 74 68  ree".stores both
5690: 20 74 68 65 20 6b 65 79 20 61 6e 64 20 74 68 65   the key and the
56a0: 20 64 61 74 61 20 74 6f 67 65 74 68 65 72 20 69   data together i
56b0: 6e 20 62 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e  n both leaves.an
56c0: 64 20 69 6e 20 69 6e 74 65 72 69 6f 72 20 70 61  d in interior pa
56d0: 67 65 73 2e 20 20 49 6e 20 74 68 65 20 53 51 4c  ges.  In the SQL
56e0: 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ite implementati
56f0: 6f 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  on, the original
5700: 0a 42 2d 54 72 65 65 20 61 6c 67 6f 72 69 74 68  .B-Tree algorith
5710: 6d 20 73 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e  m stores keys on
5720: 6c 79 2c 20 6f 6d 69 74 74 69 6e 67 20 74 68 65  ly, omitting the
5730: 20 64 61 74 61 20 65 6e 74 69 72 65 6c 79 2c 20   data entirely, 
5740: 61 6e 64 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e  and.is called an
5750: 20 22 69 6e 64 65 78 20 62 2d 74 72 65 65 22 2e   "index b-tree".
5760: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
5770: 67 65 20 69 73 20 65 69 74 68 65 72 20 61 6e 20  ge is either an 
5780: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20 6f 72  interior page or
5790: 20 61 20 6c 65 61 66 20 70 61 67 65 2e 0a 41 20   a leaf page..A 
57a0: 6c 65 61 66 20 70 61 67 65 20 63 6f 6e 74 61 69  leaf page contai
57b0: 6e 73 20 6b 65 79 73 20 61 6e 64 20 69 6e 20 74  ns keys and in t
57c0: 68 65 20 63 61 73 65 20 6f 66 20 61 20 74 61 62  he case of a tab
57d0: 6c 65 20 62 2d 74 72 65 65 20 65 61 63 68 0a 6b  le b-tree each.k
57e0: 65 79 20 68 61 73 20 61 73 73 6f 63 69 61 74 65  ey has associate
57f0: 64 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 74 65  d data.  An inte
5800: 72 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69  rior page contai
5810: 6e 73 0a 4b 20 6b 65 79 73 20 74 6f 67 65 74 68  ns.K keys togeth
5820: 65 72 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e  er with K+1 poin
5830: 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d  ters to child b-
5840: 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70  tree pages..A "p
5850: 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e  ointer" in an in
5860: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5870: 67 65 20 69 73 20 6a 75 73 74 20 74 68 65 20 33  ge is just the 3
5880: 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61  1-bit integer.pa
5890: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
58a0: 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e   child page.</p>
58b0: 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20  ..<p>Define the 
58c0: 64 65 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20  depth.of a leaf 
58d0: 62 2d 74 72 65 65 20 74 6f 20 62 65 20 31 20 61  b-tree to be 1 a
58e0: 6e 64 20 74 68 65 20 64 65 70 74 68 20 6f 66 20  nd the depth of 
58f0: 61 6e 79 20 69 6e 74 65 72 69 6f 72 20 62 2d 74  any interior b-t
5900: 72 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f  ree to be one.mo
5910: 72 65 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69  re than the maxi
5920: 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 61 6e 79  mum depth of any
5930: 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e   of its children
5940: 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  .  ^In a well-fo
5950: 72 6d 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61  rmed.database, a
5960: 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61  ll children of a
5970: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
5980: 65 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  e have the same 
5990: 64 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  depth.</p>..<p>I
59a0: 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  n an interior b-
59b0: 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 20 70  tree page, the p
59c0: 6f 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73  ointers and keys
59d0: 20 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72   logically alter
59e0: 6e 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69  nate .with a poi
59f0: 6e 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64  nter on both end
5a00: 73 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75 73  s. (The previous
5a10: 20 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20   sentence is to 
5a20: 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f  be understood.co
5a30: 6e 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65  nceptually - the
5a40: 20 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f   actual layout o
5a50: 66 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70  f the keys and.p
5a60: 6f 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74  ointers within t
5a70: 68 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20  he page is more 
5a80: 63 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20  complicated and 
5a90: 77 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65  will be describe
5aa0: 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e  d in.the sequel.
5ab0: 29 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68  )  All keys with
5ac0: 69 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  in the same page
5ad0: 20 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20   are unique and 
5ae0: 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72  are logically.or
5af0: 67 61 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e  ganized in ascen
5b00: 64 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20  ding order from 
5b10: 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20  left to right.  
5b20: 28 41 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64  (Again, this ord
5b30: 65 72 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c  ering.is logical
5b40: 2c 20 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20  , not physical. 
5b50: 20 54 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61   The actual loca
5b60: 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74  tion of keys wit
5b70: 68 69 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20  hin the page.is 
5b80: 61 72 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72  arbitrary.) ^For
5b90: 20 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e   any key X, poin
5ba0: 74 65 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74  ters to the left
5bb0: 0a 6f 66 20 61 20 58 20 72 65 66 65 72 20 74 6f  .of a X refer to
5bc0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e   b-tree pages on
5bd0: 20 77 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20   which all keys 
5be0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  are less than or
5bf0: 20 65 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f   equal to X..^Po
5c00: 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20 72 69  inters to the ri
5c10: 67 68 74 20 6f 66 20 58 20 72 65 66 65 72 20 74  ght of X refer t
5c20: 6f 20 70 61 67 65 73 20 77 68 65 72 65 20 61 6c  o pages where al
5c30: 6c 20 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61  l keys are .grea
5c40: 74 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a  ter than X.</p>.
5c50: 0a 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e  .<p>Within an in
5c60: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5c70: 67 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64  ge, each key and
5c80: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
5c90: 69 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65  its.immediate le
5ca0: 66 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  ft are combined 
5cb0: 69 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72 65  into a structure
5cc0: 20 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22   called a "cell"
5cd0: 2e 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73  .  The.right-mos
5ce0: 74 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c  t pointer is hel
5cf0: 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41  d separately.  A
5d00: 20 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61 67   leaf b-tree pag
5d10: 65 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72  e has no.pointer
5d20: 73 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20  s, but it still 
5d30: 75 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74  uses the cell st
5d40: 72 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20  ructure to hold 
5d50: 6b 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62  keys for.index b
5d60: 2d 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61  -trees or keys a
5d70: 6e 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74  nd content for t
5d80: 61 62 6c 65 20 62 2d 74 72 65 65 73 2e 20 20 44  able b-trees.  D
5d90: 61 74 61 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74  ata is also.cont
5da0: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 65 6c  ained in the cel
5db0: 6c 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72  l..</p>..<p>Ever
5dc0: 79 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61  y b-tree page ha
5dd0: 73 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61  s at most one pa
5de0: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
5df0: 2e 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  ..A b-tree page 
5e00: 77 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74  without a parent
5e10: 20 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f   is called a roo
5e20: 74 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20  t page.  A root 
5e30: 62 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65  b-tree page.toge
5e40: 74 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c  ther with the cl
5e50: 6f 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69  osure of its chi
5e60: 6c 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d  ldren form a com
5e70: 70 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74  plete b-tree..It
5e80: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e   is possible (an
5e90: 64 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72  d in fact rather
5ea0: 20 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65   common) to have
5eb0: 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a complete b-tr
5ec0: 65 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73  ee.that consists
5ed0: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
5ee0: 65 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61  e that is both a
5ef0: 20 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f   leaf and the ro
5f00: 6f 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72  ot..Because ther
5f10: 65 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66  e are pointers f
5f20: 72 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63  rom parents to c
5f30: 68 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70  hildren, every p
5f40: 61 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74  age of a.complet
5f50: 65 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20  e b-tree can be 
5f60: 6c 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20  located if only 
5f70: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  the root page is
5f80: 20 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a   known.  Hence,.
5f90: 62 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e  b-trees are iden
5fa0: 74 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20  tified by their 
5fb0: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
5fc0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72  .</p>..<p>A b-tr
5fd0: 65 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65  ee page is eithe
5fe0: 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  r a table b-tree
5ff0: 20 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65   page or an inde
6000: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  x b-tree page..A
6010: 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20  ll pages within 
6020: 65 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d  each complete b-
6030: 74 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20  tree are of the 
6040: 73 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65  same type: eithe
6050: 72 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78  r table.or index
6060: 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 6f 6e  .  There is a on
6070: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  e table b-trees 
6080: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
6090: 66 69 6c 65 0a 66 6f 72 20 65 61 63 68 20 72 6f  file.for each ro
60a0: 77 69 64 20 74 61 62 6c 65 20 69 6e 20 74 68 65  wid table in the
60b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
60c0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74  , including syst
60d0: 65 6d 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61  em tables.such a
60e0: 73 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  s sqlite_master.
60f0: 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20 69    There is one i
6100: 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 69 6e 20  ndex b-trees.in 
6110: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6120: 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78  e for each index
6130: 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61 2c 20   in the schema, 
6140: 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65  including implie
6150: 64 20 69 6e 64 65 78 65 73 0a 63 72 65 61 74 65  d indexes.create
6160: 64 20 62 79 20 75 6e 69 71 75 65 6e 65 73 73 20  d by uniqueness 
6170: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 54 68  constraints.  Th
6180: 65 72 65 20 61 72 65 20 6e 6f 20 62 2d 74 72 65  ere are no b-tre
6190: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
61a0: 74 68 0a 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  th.[virtual tabl
61b0: 65 73 5d 2e 20 20 53 70 65 63 69 66 69 63 20 76  es].  Specific v
61c0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
61d0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
61e0: 68 74 20 6d 61 6b 65 20 75 73 65 0a 6f 66 20 5b  ht make use.of [
61f0: 73 68 61 64 6f 77 20 74 61 62 6c 65 73 5d 20 66  shadow tables] f
6200: 6f 72 20 73 74 6f 72 61 67 65 2c 20 62 75 74 20  or storage, but 
6210: 74 68 6f 73 65 20 73 68 61 64 6f 77 20 74 61 62  those shadow tab
6220: 6c 65 73 20 77 69 6c 6c 20 68 61 76 65 20 73 65  les will have se
6230: 70 61 72 61 74 65 0a 65 6e 74 72 69 65 73 20 69  parate.entries i
6240: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
6250: 63 68 65 6d 61 2e 20 20 5b 57 49 54 48 4f 55 54  chema.  [WITHOUT
6260: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 75   ROWID] tables u
6270: 73 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73  se index b-trees
6280: 0a 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 74  .rather than a t
6290: 61 62 6c 65 20 62 2d 74 72 65 65 73 2c 20 73 6f  able b-trees, so
62a0: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 0a 69 6e   there is one.in
62b0: 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74 68  dex b-tree in th
62c0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
62d0: 66 6f 72 20 65 61 63 68 20 5b 57 49 54 48 4f 55  for each [WITHOU
62e0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a  T ROWID] table..
62f0: 54 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65  The b-tree corre
6300: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20  sponding to the 
6310: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
6320: 62 6c 65 20 69 73 20 61 6c 77 61 79 73 20 61 20  ble is always a 
6330: 74 61 62 6c 65 0a 62 2d 74 72 65 65 20 61 6e 64  table.b-tree and
6340: 20 61 6c 77 61 79 73 20 68 61 73 20 61 20 72 6f   always has a ro
6350: 6f 74 20 70 61 67 65 20 6f 66 20 31 2e 0a 54 68  ot page of 1..Th
6360: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
6370: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74  table contains t
6380: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
6390: 62 65 72 20 66 6f 72 20 65 76 65 72 79 20 6f 74  ber for every ot
63a0: 68 65 72 20 0a 74 61 62 6c 65 20 61 6e 64 20 69  her .table and i
63b0: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
63c0: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
63d0: 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  <p>Each entry in
63e0: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
63f0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 36 34  consists of a 64
6400: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
6410: 67 65 72 20 6b 65 79 0a 61 6e 64 20 75 70 20 74  ger key.and up t
6420: 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79 74  o 2147483647 byt
6430: 65 73 20 6f 66 20 61 72 62 69 74 72 61 72 79 20  es of arbitrary 
6440: 64 61 74 61 2e 20 20 28 54 68 65 20 6b 65 79 20  data.  (The key 
6450: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
6460: 65 0a 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e.corresponds to
6470: 20 74 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20   the [rowid] of 
6480: 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 74 68  the SQL table th
6490: 61 74 20 74 68 65 20 62 2d 74 72 65 65 20 69 6d  at the b-tree im
64a0: 70 6c 65 6d 65 6e 74 73 2e 29 0a 49 6e 74 65 72  plements.).Inter
64b0: 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65  ior table b-tree
64c0: 73 20 68 6f 6c 64 20 6f 6e 6c 79 20 6b 65 79 73  s hold only keys
64d0: 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 74 6f   and pointers to
64e0: 20 63 68 69 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64   children..All d
64f0: 61 74 61 20 69 73 20 63 6f 6e 74 61 69 6e 65 64  ata is contained
6500: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
6510: 74 72 65 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e  tree leaves.</p>
6520: 0a 0a 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20  ..<p>Each entry 
6530: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
6540: 65 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ee consists of a
6550: 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
6560: 6f 66 20 75 70 0a 74 6f 20 32 31 34 37 34 38 33  of up.to 2147483
6570: 36 34 37 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  647 bytes in len
6580: 67 74 68 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e  gth and no data.
6590: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
65a0: 61 67 6d 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c  agment cell_payl
65b0: 6f 61 64 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61  oad {cell payloa
65c0: 64 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69  d}</tcl>.<p>Defi
65d0: 6e 65 20 74 68 65 20 22 70 61 79 6c 6f 61 64 22  ne the "payload"
65e0: 20 6f 66 20 61 20 63 65 6c 6c 20 74 6f 20 62 65   of a cell to be
65f0: 20 74 68 65 20 61 72 62 69 74 72 61 72 79 20 6c   the arbitrary l
6600: 65 6e 67 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66  ength section.of
6610: 20 74 68 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20   the cell.  For 
6620: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2c  an index b-tree,
6630: 20 74 68 65 20 6b 65 79 20 69 73 20 61 6c 77 61   the key is alwa
6640: 79 73 20 61 72 62 69 74 72 61 72 79 20 69 6e 20  ys arbitrary in 
6650: 6c 65 6e 67 74 68 0a 61 6e 64 20 68 65 6e 63 65  length.and hence
6660: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20   the payload is 
6670: 74 68 65 20 6b 65 79 2e 20 20 54 68 65 72 65 20  the key.  There 
6680: 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79  are no arbitrary
6690: 20 6c 65 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73   length elements
66a0: 0a 69 6e 20 74 68 65 20 63 65 6c 6c 73 20 6f 66  .in the cells of
66b0: 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20   interior table 
66c0: 62 2d 74 72 65 65 20 70 61 67 65 73 20 61 6e 64  b-tree pages and
66d0: 20 73 6f 20 74 68 6f 73 65 20 63 65 6c 6c 73 20   so those cells 
66e0: 68 61 76 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e  have no.payload.
66f0: 20 20 54 61 62 6c 65 20 62 2d 74 72 65 65 20 6c    Table b-tree l
6700: 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69  eaf pages contai
6710: 6e 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67  n arbitrary leng
6720: 74 68 20 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73  th content and.s
6730: 6f 20 66 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74  o for cells on t
6740: 68 6f 73 65 20 70 61 67 65 73 20 74 68 65 20 70  hose pages the p
6750: 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20 63 6f  ayload is the co
6760: 6e 74 65 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74  ntent..<p>When t
6770: 68 65 20 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f  he size of paylo
6780: 61 64 20 66 6f 72 20 61 20 63 65 6c 6c 20 65 78  ad for a cell ex
6790: 63 65 65 64 73 20 61 20 63 65 72 74 61 69 6e 20  ceeds a certain 
67a0: 74 68 72 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65  threshold (to.be
67b0: 20 64 65 66 69 6e 65 64 20 6c 61 74 65 72 29 20   defined later) 
67c0: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69  then only the fi
67d0: 72 73 74 20 66 65 77 20 62 79 74 65 73 20 6f 66  rst few bytes of
67e0: 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 61 72 65   the payload.are
67f0: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
6800: 2d 74 72 65 65 20 70 61 67 65 20 61 6e 64 20 74  -tree page and t
6810: 68 65 20 62 61 6c 61 6e 63 65 20 69 73 20 73 74  he balance is st
6820: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
6830: 20 6c 69 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74   list.of content
6840: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e   overflow pages.
6850: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  </p>..<p>A b-tre
6860: 65 20 70 61 67 65 20 69 73 20 64 69 76 69 64 65  e page is divide
6870: 64 20 69 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69  d into regions i
6880: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
6890: 6f 72 64 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  order:..<ol>.<li
68a0: 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64 61  >The 100-byte da
68b0: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
68c0: 65 72 20 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67  er (found on pag
68d0: 65 20 31 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68  e 1 only).<li>Th
68e0: 65 20 38 20 6f 72 20 31 32 20 62 79 74 65 20 62  e 8 or 12 byte b
68f0: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
6900: 72 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70  r.<li>The cell p
6910: 6f 69 6e 74 65 72 20 61 72 72 61 79 0a 3c 6c 69  ointer array.<li
6920: 3e 55 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  >Unallocated spa
6930: 63 65 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20  ce.<li>The cell 
6940: 63 6f 6e 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69  content area.<li
6950: 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72 65  >The reserved re
6960: 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e  gion..</ol>.</p>
6970: 0a 0a 3c 70 3e 54 68 65 20 31 30 30 2d 62 79 74  ..<p>The 100-byt
6980: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
6990: 68 65 61 64 65 72 20 69 73 20 66 6f 75 6e 64 20  header is found 
69a0: 6f 6e 6c 79 20 6f 6e 20 70 61 67 65 20 31 2c 20  only on page 1, 
69b0: 77 68 69 63 68 20 69 73 0a 61 6c 77 61 79 73 20  which is.always 
69c0: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70  a table b-tree p
69d0: 61 67 65 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20  age.  All other 
69e0: 62 2d 74 72 65 65 20 70 61 67 65 73 20 69 6e 20  b-tree pages in 
69f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6a00: 65 0a 6f 6d 69 74 20 74 68 69 73 20 31 30 30 2d  e.omit this 100-
6a10: 62 79 74 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e  byte header.</p>
6a20: 0a 0a 3c 70 3e 54 68 65 20 72 65 73 65 72 76 65  ..<p>The reserve
6a30: 64 20 72 65 67 69 6f 6e 20 69 73 20 61 6e 20 61  d region is an a
6a40: 72 65 61 20 6f 66 20 75 6e 75 73 65 64 20 73 70  rea of unused sp
6a50: 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ace at the end o
6a60: 66 20 65 76 65 72 79 0a 70 61 67 65 20 28 65 78  f every.page (ex
6a70: 63 65 70 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67  cept the locking
6a80: 20 70 61 67 65 29 20 74 68 61 74 20 65 78 74 65   page) that exte
6a90: 6e 73 69 6f 6e 73 20 63 61 6e 20 75 73 65 20 74  nsions can use t
6aa0: 6f 20 68 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a  o hold per-page.
6ab0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 54  information.  ^T
6ac0: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72  he size of the r
6ad0: 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69  eserved region i
6ae0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
6af0: 74 68 65 20 6f 6e 65 2d 62 79 74 65 0a 75 6e 73  the one-byte.uns
6b00: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 66 6f  igned integer fo
6b10: 75 6e 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74  und at an offset
6b20: 20 6f 66 20 32 30 20 69 6e 74 6f 20 74 68 65 20   of 20 into the 
6b30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65  database file he
6b40: 61 64 65 72 2e 0a 54 68 65 20 73 69 7a 65 20 6f  ader..The size o
6b50: 66 20 74 68 65 20 72 65 73 65 72 76 65 64 20 72  f the reserved r
6b60: 65 67 69 6f 6e 20 69 73 20 75 73 75 61 6c 6c 79  egion is usually
6b70: 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   zero.</p>..<p>T
6b80: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  he b-tree page h
6b90: 65 61 64 65 72 20 69 73 20 38 20 62 79 74 65 73  eader is 8 bytes
6ba0: 20 69 6e 20 73 69 7a 65 20 66 6f 72 20 6c 65 61   in size for lea
6bb0: 66 20 70 61 67 65 73 20 61 6e 64 20 31 32 0a 62  f pages and 12.b
6bc0: 79 74 65 73 20 66 6f 72 20 69 6e 74 65 72 69 6f  ytes for interio
6bd0: 72 20 70 61 67 65 73 2e 20 20 41 6c 6c 20 6d 75  r pages.  All mu
6be0: 6c 74 69 62 79 74 65 20 76 61 6c 75 65 73 20 69  ltibyte values i
6bf0: 6e 20 74 68 65 20 70 61 67 65 20 68 65 61 64 65  n the page heade
6c00: 72 0a 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e  r.are big-endian
6c10: 2e 0a 54 68 65 20 62 2d 74 72 65 65 20 70 61 67  ..The b-tree pag
6c20: 65 20 68 65 61 64 65 72 20 69 73 20 63 6f 6d 70  e header is comp
6c30: 6f 73 65 64 20 6f 66 20 74 68 65 20 66 6f 6c 6c  osed of the foll
6c40: 6f 77 69 6e 67 20 66 69 65 6c 64 73 3a 3c 2f 70  owing fields:</p
6c50: 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42  >..<center>.<i>B
6c60: 2d 74 72 65 65 20 50 61 67 65 20 48 65 61 64 65  -tree Page Heade
6c70: 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
6c80: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
6c90: 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74   width="80%">.<t
6ca0: 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
6cb0: 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
6cc0: 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ion.<tr><td alig
6cd0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6ce0: 74 6f 70 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 63  top>0<td align=c
6cf0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6d00: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
6d10: 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74 65 20  >.^The one-byte 
6d20: 66 6c 61 67 20 61 74 20 6f 66 66 73 65 74 20 30  flag at offset 0
6d30: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6d40: 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65  b-tree page type
6d50: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20  ..^A value of 2 
6d60: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
6d70: 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e  s an interior in
6d80: 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e  dex b-tree page.
6d90: 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 35 20 6d  .^A value of 5 m
6da0: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
6db0: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 74 61 62   an interior tab
6dc0: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  le b-tree page..
6dd0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 30 20 6d  ^A value of 10 m
6de0: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
6df0: 20 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62 2d   a leaf index b-
6e00: 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61  tree page..^A va
6e10: 6c 75 65 20 6f 66 20 31 33 20 6d 65 61 6e 73 20  lue of 13 means 
6e20: 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65  the page is a le
6e30: 61 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  af table b-tree 
6e40: 70 61 67 65 2e 0a 5e 41 6e 79 20 6f 74 68 65 72  page..^Any other
6e50: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62   value for the b
6e60: 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65 20  -tree page type 
6e70: 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72  is an error..<tr
6e80: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
6e90: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
6ea0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6eb0: 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61  align=top>2<td a
6ec0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20  lign=left>.^The 
6ed0: 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72  two-byte integer
6ee0: 20 61 74 20 6f 66 66 73 65 74 20 31 20 67 69 76   at offset 1 giv
6ef0: 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  es the start of 
6f00: 74 68 65 0a 66 69 72 73 74 20 66 72 65 65 62 6c  the.first freebl
6f10: 6f 63 6b 20 6f 6e 20 74 68 65 20 70 61 67 65 2c  ock on the page,
6f20: 20 6f 72 20 69 73 20 7a 65 72 6f 20 69 66 20 74   or is zero if t
6f30: 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65  here are no free
6f40: 62 6c 6f 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20  blocks..<tr><td 
6f50: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6f60: 69 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69  ign=top>3<td ali
6f70: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6f80: 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  =top>2<td align=
6f90: 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62  left>.^The two-b
6fa0: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
6fb0: 66 66 73 65 74 20 33 20 67 69 76 65 73 20 74 68  ffset 3 gives th
6fc0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c  e number of cell
6fd0: 73 20 6f 6e 20 74 68 65 20 70 61 67 65 2e 0a 3c  s on the page..<
6fe0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
6ff0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35  ter valign=top>5
7000: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
7010: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64   valign=top>2<td
7020: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54   align=left>.^(T
7030: 68 65 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65  he two-byte inte
7040: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 20  ger at offset 5 
7050: 64 65 73 69 67 6e 61 74 65 73 20 74 68 65 20 73  designates the s
7060: 74 61 72 74 20 6f 66 20 74 68 65 20 63 65 6c 6c  tart of the cell
7070: 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 2e 20 20   content.area.  
7080: 41 20 7a 65 72 6f 20 76 61 6c 75 65 20 66 6f 72  A zero value for
7090: 20 74 68 69 73 20 69 6e 74 65 67 65 72 20 69 73   this integer is
70a0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
70b0: 36 35 35 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64  65536.)^.<tr><td
70c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
70d0: 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c  lign=top>7<td al
70e0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
70f0: 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e  n=top>1<td align
7100: 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d  =left>.^The one-
7110: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
7120: 6f 66 66 73 65 74 20 37 20 67 69 76 65 73 20 74  offset 7 gives t
7130: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 61  he number of fra
7140: 67 6d 65 6e 74 65 64 20 66 72 65 65 0a 62 79 74  gmented free.byt
7150: 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 65  es within the ce
7160: 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2e  ll content area.
7170: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
7180: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
7190: 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >8<td align=cent
71a0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c  er valign=top>4<
71b0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
71c0: 28 54 68 65 20 66 6f 75 72 2d 62 79 74 65 20 70  (The four-byte p
71d0: 61 67 65 20 6e 75 6d 62 65 72 20 61 74 20 6f 66  age number at of
71e0: 66 73 65 74 20 38 20 69 73 20 74 68 65 20 72 69  fset 8 is the ri
71f0: 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72  ght-most pointer
7200: 2e 20 20 54 68 69 73 0a 76 61 6c 75 65 20 61 70  .  This.value ap
7210: 70 65 61 72 73 20 69 6e 20 74 68 65 20 68 65 61  pears in the hea
7220: 64 65 72 20 6f 66 20 69 6e 74 65 72 69 6f 72 20  der of interior 
7230: 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 6c  b-tree pages onl
7240: 79 20 61 6e 64 20 69 73 20 6f 6d 69 74 74 65 64  y and is omitted
7250: 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20   from.all other 
7260: 70 61 67 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65  pages.)^.</table
7270: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f  ></blockquote></
7280: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65  center>..<p>^The
7290: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72   cell pointer ar
72a0: 72 61 79 20 6f 66 20 61 20 62 2d 74 72 65 65 20  ray of a b-tree 
72b0: 70 61 67 65 20 69 6d 6d 65 64 69 61 74 65 6c 79  page immediately
72c0: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74   follows the b-t
72d0: 72 65 65 0a 70 61 67 65 20 68 65 61 64 65 72 2e  ree.page header.
72e0: 20 20 4c 65 74 20 4b 20 62 65 20 74 68 65 20 6e    Let K be the n
72f0: 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f  umber of cells o
7300: 6e 20 74 68 65 20 62 74 72 65 65 2e 20 20 5e 54  n the btree.  ^T
7310: 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a  he cell pointer.
7320: 61 72 72 61 79 20 63 6f 6e 73 69 73 74 73 20 6f  array consists o
7330: 66 20 4b 20 32 2d 62 79 74 65 20 69 6e 74 65 67  f K 2-byte integ
7340: 65 72 20 6f 66 66 73 65 74 73 20 74 6f 20 74 68  er offsets to th
7350: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e  e cell contents.
7360: 20 20 5e 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e    ^The.cell poin
7370: 74 65 72 73 20 61 72 65 20 61 72 72 61 6e 67 65  ters are arrange
7380: 64 20 69 6e 20 6b 65 79 20 6f 72 64 65 72 20 77  d in key order w
7390: 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65  ith left-most ce
73a0: 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74  ll (the cell wit
73b0: 68 20 74 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b  h the.smallest k
73c0: 65 79 29 20 66 69 72 73 74 20 61 6e 64 20 74 68  ey) first and th
73d0: 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c  e right-most cel
73e0: 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68  l (the cell with
73f0: 20 74 68 65 20 6c 61 72 67 65 73 74 0a 6b 65 79   the largest.key
7400: 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ) last.</p>..<p>
7410: 43 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20  Cell content is 
7420: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 63 65  stored in the ce
7430: 6c 6c 20 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f  ll content regio
7440: 6e 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  n of the b-tree 
7450: 70 61 67 65 2e 0a 53 51 4c 69 74 65 20 73 74 72  page..SQLite str
7460: 69 76 65 73 20 74 6f 20 70 6c 61 63 65 20 63 65  ives to place ce
7470: 6c 6c 73 20 61 73 20 66 61 72 20 74 6f 77 61 72  lls as far towar
7480: 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
7490: 20 62 2d 74 72 65 65 20 70 61 67 65 20 61 73 0a   b-tree page as.
74a0: 69 74 20 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72  it can, in order
74b0: 20 74 6f 20 6c 65 61 76 65 20 73 70 61 63 65 20   to leave space 
74c0: 66 6f 72 20 66 75 74 75 72 65 20 67 72 6f 77 74  for future growt
74d0: 68 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 70 6f  h of the cell po
74e0: 69 6e 74 65 72 20 61 72 72 61 79 2e 0a 54 68 65  inter array..The
74f0: 20 61 72 65 61 20 69 6e 20 62 65 74 77 65 65 6e   area in between
7500: 20 74 68 65 20 6c 61 73 74 20 63 65 6c 6c 20 70   the last cell p
7510: 6f 69 6e 74 65 72 20 61 72 72 61 79 20 65 6e 74  ointer array ent
7520: 72 79 20 61 6e 64 20 74 68 65 20 62 65 67 69 6e  ry and the begin
7530: 6e 69 6e 67 20 6f 66 0a 74 68 65 20 66 69 72 73  ning of.the firs
7540: 74 20 63 65 6c 6c 20 69 73 20 74 68 65 20 75 6e  t cell is the un
7550: 61 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e  allocated region
7560: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61  ..</p>..<p>^If a
7570: 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e   page contains n
7580: 6f 20 63 65 6c 6c 73 20 28 77 68 69 63 68 20 69  o cells (which i
7590: 73 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20  s only possible 
75a0: 66 6f 72 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  for a root page.
75b0: 6f 66 20 61 20 74 61 62 6c 65 20 74 68 61 74 20  of a table that 
75c0: 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73  contains no rows
75d0: 29 20 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65  ) then the offse
75e0: 74 20 74 6f 20 74 68 65 0a 63 65 6c 6c 20 63 6f  t to the.cell co
75f0: 6e 74 65 6e 74 20 61 72 65 61 20 77 69 6c 6c 20  ntent area will 
7600: 65 71 75 61 6c 20 74 68 65 20 70 61 67 65 20 73  equal the page s
7610: 69 7a 65 20 6d 69 6e 75 73 20 74 68 65 20 62 79  ize minus the by
7620: 74 65 73 20 6f 66 20 72 65 73 65 72 76 65 64 20  tes of reserved 
7630: 73 70 61 63 65 2e 0a 5e 28 49 66 20 74 68 65 20  space..^(If the 
7640: 64 61 74 61 62 61 73 65 20 75 73 65 73 20 61 20  database uses a 
7650: 36 35 35 33 36 2d 62 79 74 65 20 70 61 67 65 20  65536-byte page 
7660: 73 69 7a 65 20 61 6e 64 20 74 68 65 20 72 65 73  size and the res
7670: 65 72 76 65 64 20 73 70 61 63 65 20 69 73 20 7a  erved space is z
7680: 65 72 6f 0a 28 74 68 65 20 75 73 75 61 6c 20 76  ero.(the usual v
7690: 61 6c 75 65 20 66 6f 72 20 72 65 73 65 72 76 65  alue for reserve
76a0: 64 20 73 70 61 63 65 29 20 74 68 65 6e 20 74 68  d space) then th
76b0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f  e cell content o
76c0: 66 66 73 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74  ffset of an.empt
76d0: 79 20 70 61 67 65 20 77 61 6e 74 73 20 74 6f 20  y page wants to 
76e0: 62 65 20 36 35 35 33 36 2e 20 20 0a 48 6f 77 65  be 65536.  .Howe
76f0: 76 65 72 2c 20 74 68 61 74 20 69 6e 74 65 67 65  ver, that intege
7700: 72 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74  r is too large t
7710: 6f 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  o be stored in a
7720: 0a 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64  .2-byte unsigned
7730: 20 69 6e 74 65 67 65 72 2c 20 73 6f 20 61 20 76   integer, so a v
7740: 61 6c 75 65 20 6f 66 20 30 20 69 73 20 75 73 65  alue of 0 is use
7750: 64 20 69 6e 20 69 74 73 20 70 6c 61 63 65 2e 29  d in its place.)
7760: 5e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63  ^..<p>A freebloc
7770: 6b 20 69 73 20 61 20 73 74 72 75 63 74 75 72 65  k is a structure
7780: 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66   used to identif
7790: 79 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70  y unallocated sp
77a0: 61 63 65 20 77 69 74 68 69 6e 0a 61 20 62 2d 74  ace within.a b-t
77b0: 72 65 65 20 70 61 67 65 2e 20 20 46 72 65 65 62  ree page.  Freeb
77c0: 6c 6f 63 6b 73 20 61 72 65 20 6f 72 67 61 6e 69  locks are organi
77d0: 7a 65 64 20 61 73 20 61 20 63 68 61 69 6e 2e 20  zed as a chain. 
77e0: 20 5e 54 68 65 20 66 69 72 73 74 20 32 20 62 79   ^The first 2 by
77f0: 74 65 73 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f  tes of.a freeblo
7800: 63 6b 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64  ck are a big-end
7810: 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63  ian integer whic
7820: 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
7830: 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  in the b-tree pa
7840: 67 65 0a 6f 66 20 74 68 65 20 6e 65 78 74 20 66  ge.of the next f
7850: 72 65 65 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20  reeblock in the 
7860: 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69  chain, or zero i
7870: 66 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20  f the freeblock 
7880: 69 73 20 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74  is the last on.t
7890: 68 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20  he chain.  ^The 
78a0: 74 68 69 72 64 20 61 6e 64 20 66 6f 75 72 74 68  third and fourth
78b0: 20 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 66   bytes of each f
78c0: 72 65 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20  reeblock form.a 
78d0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
78e0: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
78f0: 73 69 7a 65 20 6f 66 20 74 68 65 20 66 72 65 65  size of the free
7900: 62 6c 6f 63 6b 20 69 6e 20 62 79 74 65 73 2c 20  block in bytes, 
7910: 69 6e 63 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d  including.the 4-
7920: 62 79 74 65 20 68 65 61 64 65 72 2e 20 20 5e 46  byte header.  ^F
7930: 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c  reeblocks are al
7940: 77 61 79 73 20 63 6f 6e 6e 65 63 74 65 64 20 69  ways connected i
7950: 6e 20 6f 72 64 65 72 20 0a 6f 66 20 69 6e 63 72  n order .of incr
7960: 65 61 73 69 6e 67 20 6f 66 66 73 65 74 2e 20 20  easing offset.  
7970: 5e 54 68 65 20 73 65 63 6f 6e 64 20 66 69 65 6c  ^The second fiel
7980: 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  d of the b-tree 
7990: 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20 74  page header is t
79a0: 68 65 0a 6f 66 66 73 65 74 20 6f 66 20 74 68 65  he.offset of the
79b0: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
79c0: 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65  , or zero if the
79d0: 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c  re are no freebl
79e0: 6f 63 6b 73 20 6f 6e 20 74 68 65 0a 70 61 67 65  ocks on the.page
79f0: 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  .  ^In a well-fo
7a00: 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67 65  rmed b-tree page
7a10: 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 61 6c 77  , there will alw
7a20: 61 79 73 20 62 65 20 61 74 20 6c 65 61 73 74 20  ays be at least 
7a30: 6f 6e 65 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20  one cell.before 
7a40: 74 68 65 20 66 69 72 73 74 20 66 72 65 65 62 6c  the first freebl
7a50: 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66  ock.</p>..<p>A f
7a60: 72 65 65 62 6c 6f 63 6b 20 72 65 71 75 69 72 65  reeblock require
7a70: 73 20 61 74 20 6c 65 61 73 74 20 34 20 62 79 74  s at least 4 byt
7a80: 65 73 20 6f 66 20 73 70 61 63 65 2e 20 20 49 66  es of space.  If
7a90: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 73 6f   there is an iso
7aa0: 6c 61 74 65 64 0a 67 72 6f 75 70 20 6f 66 20 31  lated.group of 1
7ab0: 2c 20 32 2c 20 6f 72 20 33 20 75 6e 75 73 65 64  , 2, or 3 unused
7ac0: 20 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68   bytes within th
7ad0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61  e cell content a
7ae0: 72 65 61 2c 20 74 68 6f 73 65 20 62 79 74 65 73  rea, those bytes
7af0: 0a 63 6f 6d 70 72 69 73 65 20 61 20 66 72 61 67  .comprise a frag
7b00: 6d 65 6e 74 2e 20 20 5e 54 68 65 20 74 6f 74 61  ment.  ^The tota
7b10: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
7b20: 73 20 69 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e  s in all fragmen
7b30: 74 73 20 69 73 20 73 74 6f 72 65 64 0a 69 6e 20  ts is stored.in 
7b40: 74 68 65 20 66 69 66 74 68 20 66 69 65 6c 64 20  the fifth field 
7b50: 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  of the b-tree pa
7b60: 67 65 20 68 65 61 64 65 72 2e 20 20 5e 49 6e 20  ge header.  ^In 
7b70: 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d  a well-formed b-
7b80: 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 74  tree page,.the t
7b90: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
7ba0: 79 74 65 73 20 69 6e 20 66 72 61 67 6d 65 6e 74  ytes in fragment
7bb0: 73 20 6d 61 79 20 6e 6f 74 20 65 78 63 65 65 64  s may not exceed
7bc0: 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65   60.</p>..<p>The
7bd0: 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66   total amount of
7be0: 20 66 72 65 65 20 73 70 61 63 65 20 6f 6e 20 61   free space on a
7bf0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e   b-tree page con
7c00: 73 69 73 74 73 20 6f 66 20 74 68 65 20 73 69 7a  sists of the siz
7c10: 65 0a 6f 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63  e.of the unalloc
7c20: 61 74 65 64 20 72 65 67 69 6f 6e 20 70 6c 75 73  ated region plus
7c30: 20 74 68 65 20 74 6f 74 61 6c 20 73 69 7a 65 20   the total size 
7c40: 6f 66 20 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b  of all freeblock
7c50: 73 20 70 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65  s plus the.numbe
7c60: 72 20 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20  r of fragmented 
7c70: 66 72 65 65 20 62 79 74 65 73 2e 20 20 5e 53 51  free bytes.  ^SQ
7c80: 4c 69 74 65 20 6d 61 79 20 66 72 6f 6d 20 74 69  Lite may from ti
7c90: 6d 65 20 74 6f 20 74 69 6d 65 20 72 65 6f 72 67  me to time reorg
7ca0: 61 6e 69 7a 65 0a 61 20 62 2d 74 72 65 65 20 70  anize.a b-tree p
7cb0: 61 67 65 20 73 6f 20 74 68 61 74 20 74 68 65 72  age so that ther
7cc0: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
7cd0: 63 6b 73 20 6f 72 20 66 72 61 67 6d 65 6e 74 20  cks or fragment 
7ce0: 62 79 74 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65  bytes, all.unuse
7cf0: 64 20 62 79 74 65 73 20 61 72 65 20 63 6f 6e 74  d bytes are cont
7d00: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 75 6e 61  ained in the una
7d10: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 72  llocated space r
7d20: 65 67 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63  egion, and all.c
7d30: 65 6c 6c 73 20 61 72 65 20 70 61 63 6b 65 64 20  ells are packed 
7d40: 74 69 67 68 74 6c 79 20 61 74 20 74 68 65 20 65  tightly at the e
7d50: 6e 64 20 6f 66 20 74 68 65 20 70 61 67 65 2e 20  nd of the page. 
7d60: 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
7d70: 0a 22 64 65 66 72 61 67 6d 65 6e 74 69 6e 67 22  ."defragmenting"
7d80: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
7d90: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
7da0: 72 61 67 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b  ragment varint {
7db0: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
7dc0: 69 6e 74 65 67 65 72 7d 20 7b 76 61 72 69 6e 74  integer} {varint
7dd0: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61  }</tcl>..<p>A va
7de0: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
7df0: 74 65 67 65 72 20 6f 72 20 22 76 61 72 69 6e 74  teger or "varint
7e00: 22 20 69 73 20 61 20 73 74 61 74 69 63 20 48 75  " is a static Hu
7e10: 66 66 6d 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f  ffman encoding.o
7e20: 66 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  f 64-bit twos-co
7e30: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
7e40: 73 20 74 68 61 74 20 75 73 65 73 20 6c 65 73 73  s that uses less
7e50: 20 73 70 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c   space for small
7e60: 20 70 6f 73 69 74 69 76 65 20 0a 76 61 6c 75 65   positive .value
7e70: 73 2e 20 0a 41 20 76 61 72 69 6e 74 20 69 73 20  s. .A varint is 
7e80: 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20  between 1 and 9 
7e90: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
7ea0: 20 20 54 68 65 20 76 61 72 69 6e 74 20 63 6f 6e    The varint con
7eb0: 73 69 73 74 73 20 6f 66 20 65 69 74 68 65 72 0a  sists of either.
7ec0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74  zero or more byt
7ed0: 65 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65  e which have the
7ee0: 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
7ef0: 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
7f00: 61 20 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69  a single byte.wi
7f10: 74 68 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  th the high-orde
7f20: 72 20 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20  r bit clear, or 
7f30: 6e 69 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63  nine bytes, whic
7f40: 68 65 76 65 72 20 69 73 20 73 68 6f 72 74 65 72  hever is shorter
7f50: 2e 0a 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65  ..The lower seve
7f60: 6e 20 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f  n bits of each o
7f70: 66 20 74 68 65 20 66 69 72 73 74 20 65 69 67 68  f the first eigh
7f80: 74 20 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20  t bytes and all 
7f90: 38 20 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69  8 bits of.the ni
7fa0: 6e 74 68 20 62 79 74 65 20 61 72 65 20 75 73 65  nth byte are use
7fb0: 64 20 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74  d to reconstruct
7fc0: 20 74 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73   the 64-bit twos
7fd0: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
7fe0: 67 65 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65  ger..Varints are
7ff0: 20 62 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74   big-endian: bit
8000: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
8010: 20 65 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66   earlier byte of
8020: 20 74 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20   the varint.are 
8030: 74 68 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69  the more signifi
8040: 63 61 6e 74 20 61 6e 64 20 62 69 74 73 20 74 61  cant and bits ta
8050: 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61 74  ken from the lat
8060: 65 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a  er bytes. </p>..
8070: 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f 66  <p>The format of
8080: 20 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73 20   a cell depends 
8090: 6f 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f 66  on which kind of
80a0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 65   b-tree page the
80b0: 20 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f 6e   cell.appears on
80c0: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
80d0: 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65   table shows the
80e0: 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20 63   elements of a c
80f0: 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f 66  ell, in.order of
8100: 20 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f 72   appearance, for
8110: 20 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d 74   the various b-t
8120: 72 65 65 20 70 61 67 65 20 74 79 70 65 73 2e 3c  ree page types.<
8130: 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  /p>..<blockquote
8140: 3e 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62  ><dl>.<dt><p>Tab
8150: 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43  le B-Tree Leaf C
8160: 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64  ell:</p></dt>.<d
8170: 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20  d><p><ul>.<li>A 
8180: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
8190: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
81a0: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79   of bytes of pay
81b0: 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20  load, including 
81c0: 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69  any.overflow.<li
81d0: 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20  >A varint which 
81e0: 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b  is the integer k
81f0: 65 79 2c 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77  ey, a.k.a. "[row
8200: 69 64 5d 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  id]".<li>The ini
8210: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
8220: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
8230: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
8240: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
8250: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
8260: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
8270: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
8280: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
8290: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
82a0: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
82b0: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
82c0: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
82d0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
82e0: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
82f0: 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65  t><p>Table B-Tre
8300: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  e Interior Cell:
8310: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
8320: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ><ul>.<li>A 4-by
8330: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61  te big-endian pa
8340: 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  ge number which 
8350: 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c  is the left chil
8360: 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41  d pointer..<li>A
8370: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
8380: 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79   the integer key
8390: 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a  .</ul></p></dd>.
83a0: 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d  .<dt><p>Index B-
83b0: 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c  Tree Leaf Cell:<
83c0: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
83d0: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  <ul>.<li>A varin
83e0: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74  t which is the t
83f0: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
8400: 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c  ytes of key payl
8410: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
8420: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
8430: 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74  The initial port
8440: 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ion of the paylo
8450: 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ad that does not
8460: 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c   spill to overfl
8470: 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20  ow.pages..<li>A 
8480: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
8490: 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e  n integer page n
84a0: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69  umber for the fi
84b0: 72 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a  rst page of the.
84c0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69  overflow page li
84d0: 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20  st - omitted if 
84e0: 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73  all payload fits
84f0: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
8500: 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f  age..</ul></p></
8510: 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65  dd>..<dt><p>Inde
8520: 78 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f  x B-Tree Interio
8530: 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e  r Cell:</p></dt>
8540: 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69  .<dd><p><ul>.<li
8550: 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  >A 4-byte big-en
8560: 64 69 61 6e 70 61 67 65 20 6e 75 6d 62 65 72 20  dianpage number 
8570: 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 65 66  which is the lef
8580: 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e  t child pointer.
8590: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
85a0: 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ich is the total
85b0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
85c0: 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c   of key payload,
85d0: 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f   including any.o
85e0: 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20  verflow.<li>The 
85f0: 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20  initial portion 
8600: 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74  of the payload t
8610: 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69  hat does not spi
8620: 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70  ll to overflow.p
8630: 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ages..<li>A 4-by
8640: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
8650: 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65  teger page numbe
8660: 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  r for the first 
8670: 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72  page of the.over
8680: 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d  flow page list -
8690: 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20   omitted if all 
86a0: 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20  payload fits on 
86b0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
86c0: 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a  .</ul></p></dd>.
86d0: 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  </dl></blockquot
86e0: 65 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66 6f 72  e>..<p>The infor
86f0: 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20 63 61 6e  mation above can
8700: 20 62 65 20 72 65 63 61 73 74 20 69 6e 74 6f 20   be recast into 
8710: 61 20 74 61 62 6c 65 20 66 6f 72 6d 61 74 20 61  a table format a
8720: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
8730: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
8740: 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63 65 6c   cellformat {cel
8750: 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61 72 79  l format summary
8760: 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65 72 3e  }</tcl>.<center>
8770: 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c 6c 20  .<i>B-tree Cell 
8780: 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62 6c  Format</i>.<tabl
8790: 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68  e border=1 width
87a0: 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 20  ="80%">.<tr><th 
87b0: 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61 74 79  rowspan=2>Dataty
87c0: 70 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c 73 70  pe.    <th colsp
87d0: 61 6e 3d 34 3e 41 70 70 65 61 72 73 20 69 6e 2e  an=4>Appears in.
87e0: 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77 73 70  ...    <th rowsp
87f0: 61 6e 3d 32 3e 44 65 73 63 72 69 70 74 69 6f 6e  an=2>Description
8800: 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65 20 4c  .<tr><th>Table L
8810: 65 61 66 0a 20 20 20 20 3c 74 68 3e 54 61 62 6c  eaf.    <th>Tabl
8820: 65 20 49 6e 74 65 72 69 6f 72 0a 20 20 20 20 3c  e Interior.    <
8830: 74 68 3e 49 6e 64 65 78 20 4c 65 61 66 0a 20 20  th>Index Leaf.  
8840: 20 20 3c 74 68 3e 49 6e 64 65 78 20 49 6e 74 65    <th>Index Inte
8850: 72 69 6f 72 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  rior.<tr><td ali
8860: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8870: 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65  =top>4-byte inte
8880: 67 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  ger.    <td alig
8890: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
88a0: 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
88b0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
88c0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
88d0: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <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 26 6e 62 73 70 3b 0a 20 20 20 20 3c  top>&nbsp;.    <
8900: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8910: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
8920: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
8930: 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62  n=left>Page numb
8940: 65 72 20 6f 66 20 6c 65 66 74 20 63 68 69 6c 64  er of left child
8950: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
8960: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8970: 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c 74 64 20  >varint.    <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 63  .    <td align=c
89b0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
89c0: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
89d0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
89e0: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
89f0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8a00: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8a10: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8a20: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d  d align=left>Num
8a30: 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
8a40: 70 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20  payload.<tr><td 
8a50: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8a60: 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20  ign=top>varint. 
8a70: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8a80: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8a90: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8aa0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8ab0: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8ac0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8ad0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8ae0: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
8af0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8b00: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8b10: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66     <td align=lef
8b20: 74 3e 52 6f 77 69 64 0a 3c 74 72 3e 3c 74 64 20  t>Rowid.<tr><td 
8b30: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8b40: 69 67 6e 3d 74 6f 70 3e 62 79 74 65 20 61 72 72  ign=top>byte arr
8b50: 61 79 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  ay.    <td align
8b60: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8b70: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8b80: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b90: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
8ba0: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
8bb0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8bc0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8bd0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8be0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8bf0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8c00: 67 6e 3d 6c 65 66 74 3e 50 61 79 6c 6f 61 64 0a  gn=left>Payload.
8c10: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
8c20: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8c30: 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20  4-byte integer. 
8c40: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8c50: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8c60: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8c70: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8c80: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8c90: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8ca0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8cb0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8cc0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8cd0: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8ce0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c  .    <td align=l
8cf0: 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20  eft>Page number 
8d00: 6f 66 20 66 69 72 73 74 20 6f 76 65 72 66 6c 6f  of first overflo
8d10: 77 20 70 61 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c  w page.</table><
8d20: 2f 63 65 6e 74 65 72 3e 0a 0a 0a 0a 3c 74 72 3e  /center>....<tr>
8d30: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8d40: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 0a 0a 3c 70   valign=top>..<p
8d50: 3e 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 70  >The amount of p
8d60: 61 79 6c 6f 61 64 20 74 68 61 74 20 73 70 69 6c  ayload that spil
8d70: 6c 73 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77  ls onto overflow
8d80: 20 70 61 67 65 73 20 61 6c 73 6f 20 64 65 70 65   pages also depe
8d90: 6e 64 73 20 6f 6e 0a 74 68 65 20 70 61 67 65 20  nds on.the page 
8da0: 74 79 70 65 2e 20 20 46 6f 72 20 74 68 65 20 66  type.  For the f
8db0: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 75 74 61  ollowing computa
8dc0: 74 69 6f 6e 73 2c 20 6c 65 74 20 55 20 62 65 20  tions, let U be 
8dd0: 74 68 65 20 75 73 61 62 6c 65 20 73 69 7a 65 0a  the usable size.
8de0: 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 70 61  of a database pa
8df0: 67 65 2c 20 74 68 65 20 74 6f 74 61 6c 20 70 61  ge, the total pa
8e00: 67 65 20 73 69 7a 65 20 6c 65 73 73 20 74 68 65  ge size less the
8e10: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
8e20: 61 74 20 74 68 65 0a 65 6e 64 20 6f 66 20 65 61  at the.end of ea
8e30: 63 68 20 70 61 67 65 2e 20 20 41 6e 64 20 6c 65  ch page.  And le
8e40: 74 20 50 20 62 65 20 74 68 65 20 70 61 79 6c 6f  t P be the paylo
8e50: 61 64 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 62  ad size.</p>..<b
8e60: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c  lockquote><dl>.<
8e70: 64 74 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20  dt>Table B-Tree 
8e80: 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a  Leaf Cell:</dt>.
8e90: 3c 64 64 3e 3c 70 3e 0a 5e 49 66 20 74 68 65 20  <dd><p>.^If the 
8ea0: 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20 69  payload size P i
8eb0: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
8ec0: 71 75 61 6c 20 74 6f 20 55 2d 33 35 20 74 68 65  qual to U-35 the
8ed0: 6e 0a 74 68 65 20 65 6e 74 69 72 65 20 70 61 79  n.the entire pay
8ee0: 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f  load is stored o
8ef0: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 6c 65 61  n the b-tree lea
8f00: 66 20 70 61 67 65 2e 20 20 0a 5e 28 4c 65 74 20  f page.  .^(Let 
8f10: 4d 20 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f  M be ((U-12)*32/
8f20: 32 35 35 29 2d 32 33 2e 20 20 49 66 20 50 20 69  255)-23.  If P i
8f30: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 55  s greater than U
8f40: 2d 33 35 0a 74 68 65 6e 20 74 68 65 20 6e 75 6d  -35.then the num
8f50: 62 65 72 20 6f 66 20 62 79 74 65 20 73 74 6f 72  ber of byte stor
8f60: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
8f70: 20 6c 65 61 66 20 70 61 67 65 20 69 73 20 74 68   leaf page is th
8f80: 65 20 73 6d 61 6c 6c 65 72 20 6f 66 0a 4d 2b 28  e smaller of.M+(
8f90: 28 50 2d 4d 29 25 28 55 2d 34 29 29 20 61 6e 64  (P-M)%(U-4)) and
8fa0: 20 55 2d 33 35 2e 29 5e 0a 5e 28 4e 6f 74 65 20   U-35.)^.^(Note 
8fb0: 74 68 61 74 20 6e 75 6d 62 65 72 20 6f 66 20 62  that number of b
8fc0: 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  ytes stored on t
8fd0: 68 65 20 6c 65 61 66 20 70 61 67 65 20 69 73 20  he leaf page is 
8fe0: 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61 6e 20  never less than 
8ff0: 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  M.)^.</p></dd>..
9000: 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  <dt>Table B-Tree
9010: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c   Interior Cell:<
9020: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e 74  /dt>.<dd><p>.Int
9030: 65 72 69 6f 72 20 70 61 67 65 73 20 6f 66 20 74  erior pages of t
9040: 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 61 76  able b-trees hav
9050: 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20 61 6e 64  e no payload and
9060: 20 73 6f 20 74 68 65 72 65 20 69 73 20 6e 65 76   so there is nev
9070: 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61 64 20 74  er.any payload t
9080: 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64  o spill..</p></d
9090: 64 3e 0a 0a 3c 64 74 3e 49 6e 64 65 78 20 42 2d  d>..<dt>Index B-
90a0: 54 72 65 65 20 4c 65 61 66 20 4f 72 20 49 6e 74  Tree Leaf Or Int
90b0: 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e  erior Cell:</dt>
90c0: 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58  .<dd><p>.^(Let X
90d0: 20 62 65 20 28 28 55 2d 31 32 29 2a 36 34 2f 32   be ((U-12)*64/2
90e0: 35 35 29 2d 32 33 29 2e 20 20 49 66 20 74 68 65  55)-23).  If the
90f0: 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20   payload size P 
9100: 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 6f 72 20  is less than.or 
9110: 65 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e 20  equal to X then 
9120: 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f  the entire paylo
9130: 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  ad is stored on 
9140: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  the b-tree page.
9150: 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65 20 28 28  )^.^(Let M be ((
9160: 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32 33  U-12)*32/255)-23
9170: 2e 20 20 49 66 20 50 20 69 73 20 67 72 65 61 74  .  If P is great
9180: 65 72 20 74 68 61 6e 20 58 20 74 68 65 6e 20 74  er than X then t
9190: 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74  he number.of byt
91a0: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  e stored on the 
91b0: 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 74  b-tree page is t
91c0: 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66 0a 4d 2b  he smaller of.M+
91d0: 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 20 61 6e  ((P-M)%(U-4)) an
91e0: 64 20 58 2e 29 5e 0a 5e 28 4e 6f 74 65 20 74 68  d X.)^.^(Note th
91f0: 61 74 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  at number of byt
9200: 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65  es stored on the
9210: 20 69 6e 64 65 78 20 70 61 67 65 20 69 73 20 6e   index page is n
9220: 65 76 65 72 20 6c 65 73 73 20 74 68 61 6e 20 4d  ever less than M
9230: 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f  .)^.</p></dd>.</
9240: 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  dl></blockquote>
9250: 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72 66 6c 6f  ..<p>The overflo
9260: 77 20 74 68 72 65 73 68 6f 6c 64 73 20 61 72 65  w thresholds are
9270: 20 64 65 73 69 67 6e 65 64 20 74 6f 20 67 69 76   designed to giv
9280: 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f  e a minimum fano
9290: 75 74 20 6f 66 0a 34 20 66 6f 72 20 69 6e 64 65  ut of.4 for inde
92a0: 78 20 62 2d 74 72 65 65 73 20 61 6e 64 20 74 6f  x b-trees and to
92b0: 20 6d 61 6b 65 20 73 75 72 65 20 65 6e 6f 75 67   make sure enoug
92c0: 68 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64  h of the payload
92d0: 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  .is on the b-tre
92e0: 65 20 70 61 67 65 20 74 68 61 74 20 74 68 65 20  e page that the 
92f0: 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63 61  record header ca
9300: 6e 20 75 73 75 61 6c 6c 79 20 62 65 20 61 63 63  n usually be acc
9310: 65 73 73 65 64 0a 77 69 74 68 6f 75 74 20 63 6f  essed.without co
9320: 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f 76 65 72  nsulting an over
9330: 66 6c 6f 77 20 70 61 67 65 2e 20 20 49 6e 20 68  flow page.  In h
9340: 69 6e 64 73 69 67 68 74 2c 20 74 68 65 20 64 65  indsight, the de
9350: 73 69 67 6e 65 72 73 20 6f 66 0a 74 68 65 20 53  signers of.the S
9360: 51 4c 69 74 65 20 62 2d 74 72 65 65 20 6c 6f 67  QLite b-tree log
9370: 69 63 20 72 65 61 6c 69 7a 65 20 74 68 61 74 20  ic realize that 
9380: 74 68 65 73 65 20 74 68 72 65 73 68 6f 6c 64 73  these thresholds
9390: 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
93a0: 0a 6d 61 64 65 20 6d 75 63 68 20 73 69 6d 70 6c  .made much simpl
93b0: 65 72 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68  er.  However, th
93c0: 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 63  e computations c
93d0: 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  annot be changed
93e0: 0a 77 69 74 68 6f 75 74 20 72 65 73 75 6c 74 69  .without resulti
93f0: 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f 6d 70 61  ng in an incompa
9400: 74 69 62 6c 65 20 66 69 6c 65 20 66 6f 72 6d 61  tible file forma
9410: 74 2e 20 20 41 6e 64 20 74 68 65 20 63 75 72 72  t.  And the curr
9420: 65 6e 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  ent computations
9430: 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65 76 65 6e  .work well, even
9440: 20 69 66 20 74 68 65 79 20 61 72 65 20 61 20 6c   if they are a l
9450: 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f  ittle complex.</
9460: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
9470: 6d 65 6e 74 20 6f 76 66 6c 70 67 73 20 7b 6f 76  ment ovflpgs {ov
9480: 65 72 66 6c 6f 77 20 70 61 67 65 7d 20 7b 6f 76  erflow page} {ov
9490: 65 72 66 6c 6f 77 20 70 61 67 65 73 7d 3c 2f 74  erflow pages}</t
94a0: 63 6c 3e 0a 3c 68 33 3e 31 2e 36 20 43 65 6c 6c  cl>.<h3>1.6 Cell
94b0: 20 50 61 79 6c 6f 61 64 20 4f 76 65 72 66 6c 6f   Payload Overflo
94c0: 77 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70  w Pages</h3>..<p
94d0: 3e 5e 57 68 65 6e 20 74 68 65 20 70 61 79 6c 6f  >^When the paylo
94e0: 61 64 20 6f 66 20 61 20 62 2d 74 72 65 65 20 63  ad of a b-tree c
94f0: 65 6c 6c 20 69 73 20 74 6f 6f 20 6c 61 72 67 65  ell is too large
9500: 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65 20   for the b-tree 
9510: 70 61 67 65 2c 0a 74 68 65 20 73 75 72 70 6c 75  page,.the surplu
9520: 73 20 69 73 20 73 70 69 6c 6c 65 64 20 6f 6e 74  s is spilled ont
9530: 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73  o overflow pages
9540: 2e 20 20 5e 4f 76 65 72 66 6c 6f 77 20 70 61 67  .  ^Overflow pag
9550: 65 73 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  es form a linked
9560: 0a 6c 69 73 74 2e 20 20 5e 54 68 65 20 66 69 72  .list.  ^The fir
9570: 73 74 20 66 6f 75 72 20 62 79 74 65 73 20 6f 66  st four bytes of
9580: 20 65 61 63 68 20 6f 76 65 72 66 6c 6f 77 20 70   each overflow p
9590: 61 67 65 20 61 72 65 20 61 20 62 69 67 2d 65 6e  age are a big-en
95a0: 64 69 61 6e 0a 69 6e 74 65 67 65 72 20 77 68 69  dian.integer whi
95b0: 63 68 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  ch is the page n
95c0: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78  umber of the nex
95d0: 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 63 68  t page in the ch
95e0: 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a 66 6f 72  ain, or zero.for
95f0: 20 74 68 65 20 66 69 6e 61 6c 20 70 61 67 65 20   the final page 
9600: 69 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20 5e  in the chain.  ^
9610: 54 68 65 20 66 69 66 74 68 20 62 79 74 65 20 74  The fifth byte t
9620: 68 72 6f 75 67 68 20 74 68 65 20 6c 61 73 74 20  hrough the last 
9630: 75 73 61 62 6c 65 0a 62 79 74 65 20 61 72 65 20  usable.byte are 
9640: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 6f 76 65  used to hold ove
9650: 72 66 6c 6f 77 20 63 6f 6e 74 65 6e 74 2e 3c 2f  rflow content.</
9660: 70 3e 0a 0a 3c 68 33 3e 31 2e 37 20 50 6f 69 6e  p>..<h3>1.7 Poin
9670: 74 65 72 20 4d 61 70 20 6f 72 20 50 74 72 6d 61  ter Map or Ptrma
9680: 70 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70  p Pages</h3>..<p
9690: 3e 50 6f 69 6e 74 65 72 20 6d 61 70 20 6f 72 20  >Pointer map or 
96a0: 70 74 72 6d 61 70 20 70 61 67 65 73 20 61 72 65  ptrmap pages are
96b0: 20 65 78 74 72 61 20 70 61 67 65 73 20 69 6e 73   extra pages ins
96c0: 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 64  erted into the d
96d0: 61 74 61 62 61 73 65 0a 74 6f 20 6d 61 6b 65 20  atabase.to make 
96e0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
96f0: 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61   [auto_vacuum] a
9700: 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f  nd [incremental_
9710: 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73 0a 6d 6f  vacuum] modes.mo
9720: 72 65 20 65 66 66 69 63 69 65 6e 74 2e 20 20 4f  re efficient.  O
9730: 74 68 65 72 20 70 61 67 65 20 74 79 70 65 73 20  ther page types 
9740: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
9750: 74 79 70 69 63 61 6c 6c 79 20 68 61 76 65 20 70  typically have p
9760: 6f 69 6e 74 65 72 73 0a 66 72 6f 6d 20 70 61 72  ointers.from par
9770: 65 6e 74 20 74 6f 20 63 68 69 6c 64 2e 20 20 46  ent to child.  F
9780: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6e 20 69  or example, an i
9790: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70  nterior b-tree p
97a0: 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 70 6f 69  age contains poi
97b0: 6e 74 65 72 73 0a 74 6f 20 69 74 73 20 63 68 69  nters.to its chi
97c0: 6c 64 20 62 2d 74 72 65 65 20 70 61 67 65 73 20  ld b-tree pages 
97d0: 61 6e 64 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20  and an overflow 
97e0: 63 68 61 69 6e 20 68 61 73 20 61 20 70 6f 69 6e  chain has a poin
97f0: 74 65 72 0a 66 72 6f 6d 20 65 61 72 6c 69 65 72  ter.from earlier
9800: 20 74 6f 20 6c 61 74 65 72 20 6c 69 6e 6b 73 20   to later links 
9810: 69 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20 41  in the chain.  A
9820: 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e   ptrmap page con
9830: 74 61 69 6e 73 20 6c 69 6e 6b 61 67 65 0a 69 6e  tains linkage.in
9840: 66 6f 72 6d 61 74 69 6f 6e 20 67 6f 69 6e 67 20  formation going 
9850: 69 6e 20 74 68 65 20 6f 70 70 6f 73 69 74 65 20  in the opposite 
9860: 64 69 72 65 63 74 69 6f 6e 2c 20 66 72 6f 6d 20  direction, from 
9870: 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 2e  child to parent.
9880: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72 6d 61 70  </p>..<p>^Ptrmap
9890: 20 70 61 67 65 73 20 6d 75 73 74 20 65 78 69 73   pages must exis
98a0: 74 20 69 6e 20 61 6e 79 20 64 61 74 61 62 61 73  t in any databas
98b0: 65 20 66 69 6c 65 20 77 68 69 63 68 20 68 61 73  e file which has
98c0: 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c 61 72 67   a non-zero.larg
98d0: 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20  est root b-tree 
98e0: 70 61 67 65 20 76 61 6c 75 65 20 61 74 20 6f 66  page value at of
98f0: 66 73 65 74 20 35 32 20 69 6e 20 74 68 65 20 64  fset 52 in the d
9900: 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a  atabase header..
9910: 5e 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20  ^If the largest 
9920: 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65  root b-tree page
9930: 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20   value is zero, 
9940: 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
9950: 65 20 6d 75 73 74 20 6e 6f 74 0a 63 6f 6e 74 61  e must not.conta
9960: 69 6e 20 70 74 72 6d 61 70 20 70 61 67 65 73 2e  in ptrmap pages.
9970: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 64  </p>..<p>^In a d
9980: 61 74 61 62 61 73 65 20 77 69 74 68 20 70 74 72  atabase with ptr
9990: 6d 61 70 20 70 61 67 65 73 2c 20 74 68 65 20 66  map pages, the f
99a0: 69 72 73 74 20 70 74 72 6d 61 70 20 70 61 67 65  irst ptrmap page
99b0: 20 69 73 20 70 61 67 65 20 32 2e 0a 41 20 70 74   is page 2..A pt
99c0: 72 6d 61 70 20 70 61 67 65 20 63 6f 6e 73 69 73  rmap page consis
99d0: 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79 20 6f  ts of an array o
99e0: 66 20 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73  f 5-byte entries
99f0: 2e 20 20 4c 65 74 20 4a 20 62 65 20 74 68 65 0a  .  Let J be the.
9a00: 6e 75 6d 62 65 72 20 6f 66 20 35 2d 62 79 74 65  number of 5-byte
9a10: 20 65 6e 74 72 69 65 73 20 74 68 61 74 20 77 69   entries that wi
9a20: 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75 73  ll fit in the us
9a30: 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20 61 20  able space of a 
9a40: 70 61 67 65 2e 0a 28 49 6e 20 6f 74 68 65 72 20  page..(In other 
9a50: 77 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e 29 20 20  words, J=U/5.)  
9a60: 5e 54 68 65 20 66 69 72 73 74 20 70 74 72 6d 61  ^The first ptrma
9a70: 70 20 70 61 67 65 20 77 69 6c 6c 20 63 6f 6e 74  p page will cont
9a80: 61 69 6e 20 62 61 63 6b 20 70 6f 69 6e 74 65 72  ain back pointer
9a90: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72  .information for
9aa0: 20 70 61 67 65 73 20 33 20 74 68 72 6f 75 67 68   pages 3 through
9ab0: 20 4a 2b 32 2c 20 69 6e 63 6c 75 73 69 76 65 2e   J+2, inclusive.
9ac0: 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 70 6f    ^The second po
9ad0: 69 6e 74 65 72 20 6d 61 70 0a 70 61 67 65 20 77  inter map.page w
9ae0: 69 6c 6c 20 62 65 20 6f 6e 20 70 61 67 65 20 4a  ill be on page J
9af0: 2b 33 20 61 6e 64 20 74 68 61 74 20 70 74 72 6d  +3 and that ptrm
9b00: 61 70 20 70 61 67 65 20 77 69 6c 6c 20 70 72 6f  ap page will pro
9b10: 76 69 64 65 20 62 61 63 6b 20 70 6f 69 6e 74 65  vide back pointe
9b20: 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  r.information fo
9b30: 72 20 70 61 67 65 73 20 4a 2b 34 20 74 68 72 6f  r pages J+4 thro
9b40: 75 67 68 20 32 2a 4a 2b 33 20 69 6e 63 6c 75 73  ugh 2*J+3 inclus
9b50: 69 76 65 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72  ive.  And so for
9b60: 74 68 20 66 6f 72 0a 74 68 65 20 65 6e 74 69 72  th for.the entir
9b70: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
9b80: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20  </p>..<p>^(In a 
9b90: 64 61 74 61 62 61 73 65 20 74 68 61 74 20 75 73  database that us
9ba0: 65 73 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  es ptrmap pages,
9bb0: 20 61 6c 6c 20 70 61 67 65 73 20 61 74 20 6c 6f   all pages at lo
9bc0: 63 61 74 69 6f 6e 73 20 69 64 65 6e 74 69 66 69  cations identifi
9bd0: 65 64 0a 62 79 20 74 68 65 20 63 6f 6d 70 75 74  ed.by the comput
9be0: 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 70 72 65  ation in the pre
9bf0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
9c00: 6d 75 73 74 20 62 65 20 70 74 72 6d 61 70 20 70  must be ptrmap p
9c10: 61 67 65 20 61 6e 64 20 6e 6f 0a 6f 74 68 65 72  age and no.other
9c20: 20 70 61 67 65 20 6d 61 79 20 62 65 20 61 20 70   page may be a p
9c30: 74 72 6d 61 70 20 70 61 67 65 2e 20 20 45 78 63  trmap page.  Exc
9c40: 65 70 74 2c 20 69 66 20 74 68 65 20 62 79 74 65  ept, if the byte
9c50: 2d 6c 6f 63 6b 20 70 61 67 65 20 68 61 70 70 65  -lock page happe
9c60: 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e 20 74 68  ns to.fall on th
9c70: 65 20 73 61 6d 65 20 70 61 67 65 20 6e 75 6d 62  e same page numb
9c80: 65 72 20 61 73 20 61 20 70 74 72 6d 61 70 20 70  er as a ptrmap p
9c90: 61 67 65 2c 20 74 68 65 6e 20 74 68 65 20 70 74  age, then the pt
9ca0: 72 6d 61 70 20 69 73 20 6d 6f 76 65 64 0a 74 6f  rmap is moved.to
9cb0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70   the following p
9cc0: 61 67 65 20 66 6f 72 20 74 68 61 74 20 6f 6e 65  age for that one
9cd0: 20 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70   case.)^</p>..<p
9ce0: 3e 45 61 63 68 20 35 2d 62 79 74 65 20 65 6e 74  >Each 5-byte ent
9cf0: 72 79 20 6f 6e 20 61 20 70 74 72 6d 61 70 20 70  ry on a ptrmap p
9d00: 61 67 65 20 70 72 6f 76 69 64 65 73 20 62 61 63  age provides bac
9d10: 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69  k-link informati
9d20: 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e 65 20 6f 66  on about .one of
9d30: 20 70 61 67 65 73 20 74 68 61 74 20 69 6d 6d 65   pages that imme
9d40: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74  diately follow t
9d50: 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20  he pointer map. 
9d60: 20 5e 28 49 66 20 70 61 67 65 20 42 20 69 73 20   ^(If page B is 
9d70: 61 0a 70 74 72 6d 61 70 20 70 61 67 65 20 74 68  a.ptrmap page th
9d80: 65 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66  en back-link inf
9d90: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 70  ormation about p
9da0: 61 67 65 20 42 2b 31 20 69 73 20 70 72 6f 76 69  age B+1 is provi
9db0: 64 65 64 20 62 79 0a 74 68 65 20 66 69 72 73 74  ded by.the first
9dc0: 20 65 6e 74 72 79 20 6f 6e 20 74 68 65 20 70 6f   entry on the po
9dd0: 69 6e 74 65 72 20 6d 61 70 2e 20 20 49 6e 66 6f  inter map.  Info
9de0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 70 61  rmation about pa
9df0: 67 65 20 42 2b 32 20 69 73 0a 70 72 6f 76 69 64  ge B+2 is.provid
9e00: 65 64 20 62 79 20 74 68 65 20 73 65 63 6f 6e 64  ed by the second
9e10: 20 65 6e 74 72 79 2e 20 20 41 6e 64 20 73 6f 20   entry.  And so 
9e20: 66 6f 72 74 68 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  forth.)^</p>..<p
9e30: 3e 45 61 63 68 20 35 2d 62 79 74 65 20 70 74 72  >Each 5-byte ptr
9e40: 6d 61 70 20 65 6e 74 72 79 20 63 6f 6e 73 69 73  map entry consis
9e50: 74 73 20 6f 66 20 6f 6e 65 20 62 79 74 65 20 6f  ts of one byte o
9e60: 66 20 22 70 61 67 65 20 74 79 70 65 22 20 69 6e  f "page type" in
9e70: 66 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c 6c 6f 77  formation.follow
9e80: 65 64 20 62 79 20 61 20 34 2d 62 79 74 65 20 62  ed by a 4-byte b
9e90: 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e  ig-endian page n
9ea0: 75 6d 62 65 72 2e 20 20 46 69 76 65 20 70 61 67  umber.  Five pag
9eb0: 65 20 74 79 70 65 73 20 61 72 65 20 72 65 63 6f  e types are reco
9ec0: 67 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a 0a 3c 6f  gnized:.</p>..<o
9ed0: 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65 20  l>.<li>A b-tree 
9ee0: 72 6f 6f 74 20 70 61 67 65 2e 20 20 54 68 65 0a  root page.  The.
9ef0: 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75  page number shou
9f00: 6c 64 20 62 65 20 7a 65 72 6f 2e 0a 3c 6c 69 3e  ld be zero..<li>
9f10: 41 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 2e  A freelist page.
9f20: 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65    The page numbe
9f30: 72 20 73 68 6f 75 6c 64 20 62 65 0a 7a 65 72 6f  r should be.zero
9f40: 2e 0a 3c 6c 69 3e 54 68 65 20 66 69 72 73 74 20  ..<li>The first 
9f50: 70 61 67 65 20 6f 66 20 61 0a 63 65 6c 6c 20 70  page of a.cell p
9f60: 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20  ayload overflow 
9f70: 63 68 61 69 6e 2e 20 20 54 68 65 20 70 61 67 65  chain.  The page
9f80: 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 62   number is the b
9f90: 2d 74 72 65 65 20 70 61 67 65 20 74 68 61 74 0a  -tree page that.
9fa0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63 65 6c  contains the cel
9fb0: 6c 20 77 68 6f 73 65 20 63 6f 6e 74 65 6e 74 20  l whose content 
9fc0: 68 61 73 20 6f 76 65 72 66 6c 6f 77 65 64 2e 0a  has overflowed..
9fd0: 3c 6c 69 3e 41 20 70 61 67 65 20 69 6e 20 61 6e  <li>A page in an
9fe0: 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 0a   overflow chain.
9ff0: 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 66  other than the f
a000: 69 72 73 74 20 70 61 67 65 2e 20 20 54 68 65 20  irst page.  The 
a010: 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74  page number is t
a020: 68 65 20 70 72 69 6f 72 20 70 61 67 65 20 6f 66  he prior page of
a030: 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 63 68   the.overflow ch
a040: 61 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f 6e 2d 72  ain..<li>A non-r
a050: 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e  oot b-tree page.
a060: 20 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62 65    The.page numbe
a070: 72 20 69 73 20 74 68 65 20 70 61 72 65 6e 74 20  r is the parent 
a080: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 6f  b-tree page..</o
a090: 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 6e 79 20 64  l>..<p>^In any d
a0a0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 68 61  atabase file tha
a0b0: 74 20 63 6f 6e 74 61 69 6e 73 20 70 74 72 6d 61  t contains ptrma
a0c0: 70 20 70 61 67 65 73 2c 20 61 6c 6c 20 62 2d 74  p pages, all b-t
a0d0: 72 65 65 20 72 6f 6f 74 20 70 61 67 65 73 20 0a  ree root pages .
a0e0: 6d 75 73 74 20 63 6f 6d 65 20 62 65 66 6f 72 65  must come before
a0f0: 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d   any non-root b-
a100: 74 72 65 65 20 70 61 67 65 2c 20 63 65 6c 6c 20  tree page, cell 
a110: 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77  payload overflow
a120: 20 70 61 67 65 2c 20 6f 72 0a 66 72 65 65 6c 69   page, or.freeli
a130: 73 74 20 70 61 67 65 2e 20 20 54 68 69 73 20 72  st page.  This r
a140: 65 73 74 72 69 63 74 69 6f 6e 20 65 6e 73 75 72  estriction ensur
a150: 65 73 20 74 68 61 74 20 61 20 72 6f 6f 74 20 70  es that a root p
a160: 61 67 65 20 77 69 6c 6c 20 6e 65 76 65 72 0a 62  age will never.b
a170: 65 20 6d 6f 76 65 64 20 64 75 72 69 6e 67 20 61  e moved during a
a180: 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 6f 72  n auto-vacuum or
a190: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63   incremental-vac
a1a0: 75 75 6d 2e 20 20 54 68 65 20 61 75 74 6f 2d 76  uum.  The auto-v
a1b0: 61 63 75 75 6d 0a 6c 6f 67 69 63 20 64 6f 65 73  acuum.logic does
a1c0: 20 6e 6f 74 20 6b 6e 6f 77 20 68 6f 77 20 74 6f   not know how to
a1d0: 20 75 70 64 61 74 65 20 74 68 65 20 72 6f 6f 74   update the root
a1e0: 5f 70 61 67 65 20 66 69 65 6c 64 20 6f 66 20 74  _page field of t
a1f0: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
a200: 0a 74 61 62 6c 65 20 61 6e 64 20 73 6f 20 69 74  .table and so it
a210: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f   is necessary to
a220: 20 70 72 65 76 65 6e 74 20 72 6f 6f 74 20 70 61   prevent root pa
a230: 67 65 73 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d  ges from being m
a240: 6f 76 65 64 0a 64 75 72 69 6e 67 20 61 6e 20 61  oved.during an a
a250: 75 74 6f 2d 76 61 63 75 75 6d 20 69 6e 20 6f 72  uto-vacuum in or
a260: 64 65 72 20 74 6f 20 70 72 65 73 65 72 76 65 20  der to preserve 
a270: 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66  the integrity of
a280: 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74   the.sqlite_mast
a290: 65 72 20 74 61 62 6c 65 2e 20 20 5e 52 6f 6f 74  er table.  ^Root
a2a0: 20 70 61 67 65 73 20 61 72 65 20 6d 6f 76 65 64   pages are moved
a2b0: 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   to the beginnin
a2c0: 67 20 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73  g of the.databas
a2d0: 65 20 66 69 6c 65 20 62 79 20 74 68 65 20 43 52  e file by the CR
a2e0: 45 41 54 45 20 54 41 42 4c 45 2c 20 43 52 45 41  EATE TABLE, CREA
a2f0: 54 45 20 49 4e 44 45 58 2c 20 44 52 4f 50 20 54  TE INDEX, DROP T
a300: 41 42 4c 45 2c 20 61 6e 64 0a 44 52 4f 50 20 49  ABLE, and.DROP I
a310: 4e 44 45 58 20 6f 70 65 72 61 74 69 6f 6e 73 2e  NDEX operations.
a320: 3c 2f 70 3e 0a 0a 3c 68 32 3e 32 2e 30 20 53 63  </p>..<h2>2.0 Sc
a330: 68 65 6d 61 20 4c 61 79 65 72 3c 2f 68 32 3e 0a  hema Layer</h2>.
a340: 0a 3c 70 3e 54 68 65 20 66 6f 72 65 67 6f 69 6e  .<p>The foregoin
a350: 67 20 74 65 78 74 20 64 65 73 63 72 69 62 65 73  g text describes
a360: 20 6c 6f 77 2d 6c 65 76 65 6c 20 61 73 70 65 63   low-level aspec
a370: 74 73 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65  ts of the SQLite
a380: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 2e 20 20 54   file.format.  T
a390: 68 65 20 62 2d 74 72 65 65 20 6d 65 63 68 61 6e  he b-tree mechan
a3a0: 69 73 6d 20 70 72 6f 76 69 64 65 73 20 61 20 70  ism provides a p
a3b0: 6f 77 65 72 66 75 6c 20 61 6e 64 20 65 66 66 69  owerful and effi
a3c0: 63 69 65 6e 74 20 6d 65 61 6e 73 20 6f 66 0a 61  cient means of.a
a3d0: 63 63 65 73 73 69 6e 67 20 61 20 6c 61 72 67 65  ccessing a large
a3e0: 20 64 61 74 61 20 73 65 74 2e 20 20 54 68 69 73   data set.  This
a3f0: 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 64 65   section will de
a400: 73 63 72 69 62 65 20 68 6f 77 20 74 68 65 0a 6c  scribe how the.l
a410: 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 20  ow-level b-tree 
a420: 6c 61 79 65 72 20 69 73 20 75 73 65 64 20 74 6f  layer is used to
a430: 20 69 6d 70 6c 65 6d 65 6e 74 20 68 69 67 68 65   implement highe
a440: 72 2d 6c 65 76 65 6c 20 53 51 4c 0a 63 61 70 61  r-level SQL.capa
a450: 62 69 6c 69 74 69 65 73 2e 3c 2f 70 3e 0a 0a 3c  bilities.</p>..<
a460: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
a470: 72 65 63 6f 72 64 5f 66 6f 72 6d 61 74 20 7b 72  record_format {r
a480: 65 63 6f 72 64 20 66 6f 72 6d 61 74 7d 3c 2f 74  ecord format}</t
a490: 63 6c 3e 0a 3c 68 33 3e 32 2e 31 20 52 65 63 6f  cl>.<h3>2.1 Reco
a4a0: 72 64 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a  rd Format</h3>..
a4b0: 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f 72 20  <p>The data for 
a4c0: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  a table b-tree l
a4d0: 65 61 66 20 70 61 67 65 20 61 6e 64 20 74 68 65  eaf page and the
a4e0: 20 6b 65 79 0a 6f 66 20 61 6e 20 69 6e 64 65 78   key.of an index
a4f0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 61 73   b-tree page was
a500: 20 63 68 61 72 61 63 74 65 72 69 7a 65 64 20 61   characterized a
a510: 62 6f 76 65 0a 61 73 20 61 6e 20 61 72 62 69 74  bove.as an arbit
a520: 72 61 72 79 20 73 65 71 75 65 6e 63 65 20 6f 66  rary sequence of
a530: 20 62 79 74 65 73 2e 0a 54 68 65 20 70 72 69 6f   bytes..The prio
a540: 72 20 64 69 73 63 75 73 73 69 6f 6e 20 6d 65 6e  r discussion men
a550: 74 69 6f 6e 65 64 20 6f 6e 65 20 6b 65 79 20 62  tioned one key b
a560: 65 69 6e 67 20 6c 65 73 73 20 74 68 61 6e 20 61  eing less than a
a570: 6e 6f 74 68 65 72 2c 20 62 75 74 0a 64 69 64 20  nother, but.did 
a580: 6e 6f 74 20 64 65 66 69 6e 65 20 77 68 61 74 20  not define what 
a590: 22 6c 65 73 73 20 74 68 61 6e 22 20 6d 65 61 6e  "less than" mean
a5a0: 74 2e 20 20 54 68 65 20 63 75 72 72 65 6e 74 20  t.  The current 
a5b0: 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 61 64 64  section will add
a5c0: 72 65 73 73 0a 74 68 65 73 65 20 6f 6d 69 73 73  ress.these omiss
a5d0: 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61  ions.</p>..<p>Pa
a5e0: 79 6c 6f 61 64 2c 20 65 69 74 68 65 72 20 74 61  yload, either ta
a5f0: 62 6c 65 20 62 2d 74 72 65 65 20 64 61 74 61 20  ble b-tree data 
a600: 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  or index b-tree 
a610: 6b 65 79 73 2c 20 0a 69 73 20 61 6c 77 61 79 73  keys, .is always
a620: 20 69 6e 20 74 68 65 20 22 72 65 63 6f 72 64 20   in the "record 
a630: 66 6f 72 6d 61 74 22 2e 0a 54 68 65 20 72 65 63  format"..The rec
a640: 6f 72 64 20 66 6f 72 6d 61 74 20 64 65 66 69 6e  ord format defin
a650: 65 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  es a sequence of
a660: 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f   values correspo
a670: 6e 64 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73  nding.to columns
a680: 20 69 6e 20 61 20 74 61 62 6c 65 20 6f 72 20 69   in a table or i
a690: 6e 64 65 78 2e 20 20 54 68 65 20 72 65 63 6f 72  ndex.  The recor
a6a0: 64 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69  d format specifi
a6b0: 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66  es the number.of
a6c0: 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61   columns, the da
a6d0: 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  tatype of each c
a6e0: 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63  olumn, and the c
a6f0: 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 63  ontent of each c
a700: 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  olumn.</p>..<p>T
a710: 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
a720: 20 6d 61 6b 65 73 20 65 78 74 65 6e 73 69 76 65   makes extensive
a730: 20 75 73 65 20 6f 66 20 74 68 65 20 0a 5b 76 61   use of the .[va
a740: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
a750: 74 65 67 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e  teger] or [varin
a760: 74 5d 0a 72 65 70 72 65 73 65 6e 74 61 74 69 6f  t].representatio
a770: 6e 20 6f 66 20 36 34 2d 62 69 74 20 73 69 67 6e  n of 64-bit sign
a780: 65 64 20 69 6e 74 65 67 65 72 73 20 64 65 66 69  ed integers defi
a790: 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a  ned above.</p>..
a7a0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
a7b0: 20 73 65 72 69 61 6c 74 79 70 65 20 7b 73 65 72   serialtype {ser
a7c0: 69 61 6c 20 74 79 70 65 7d 20 7b 73 65 72 69 61  ial type} {seria
a7d0: 6c 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c  l types}</tcl>.<
a7e0: 70 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e 74 61  p>A record conta
a7f0: 69 6e 73 20 61 20 68 65 61 64 65 72 20 61 6e 64  ins a header and
a800: 20 61 20 62 6f 64 79 2c 20 69 6e 20 74 68 61 74   a body, in that
a810: 20 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68 65 20   order.  .^(The 
a820: 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69  header begins wi
a830: 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69  th a single vari
a840: 6e 74 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  nt which determi
a850: 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
a860: 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 69 6e  mber.of bytes in
a870: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
a880: 65 20 76 61 72 69 6e 74 20 76 61 6c 75 65 20 69  e varint value i
a890: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
a8a0: 65 20 68 65 61 64 65 72 20 69 6e 0a 62 79 74 65  e header in.byte
a8b0: 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
a8c0: 73 69 7a 65 20 76 61 72 69 6e 74 20 69 74 73 65  size varint itse
a8d0: 6c 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e  lf.)^  ^Followin
a8e0: 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
a8f0: 74 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72  t are.one or mor
a900: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  e additional var
a910: 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f  ints, one per co
a920: 6c 75 6d 6e 2e 20 20 54 68 65 73 65 20 61 64 64  lumn.  These add
a930: 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a  itional varints.
a940: 61 72 65 20 63 61 6c 6c 65 64 20 22 73 65 72 69  are called "seri
a950: 61 6c 20 74 79 70 65 22 20 6e 75 6d 62 65 72 73  al type" numbers
a960: 20 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65 20 74   and.determine t
a970: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65  he datatype of e
a980: 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f  ach column, acco
a990: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c  rding to the fol
a9a0: 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 3c 2f 70  lowing chart:</p
a9b0: 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 53  >..<center>.<i>S
a9c0: 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65 73  erial Type Codes
a9d0: 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20 46   Of The Record F
a9e0: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
a9f0: 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22  able width="80%"
aa00: 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c   border=1>.<tr><
aa10: 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c 74  th>Serial Type<t
aa20: 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74  h>Content Size<t
aa30: 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74  h>Meaning.<tr><t
aa40: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
aa50: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
aa60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
aa70: 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67  center>0<td alig
aa80: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
aa90: 73 20 61 20 4e 55 4c 4c 2e 0a 3c 74 72 3e 3c 74  s a NULL..<tr><t
aaa0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
aab0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 76  gn=center>1<td v
aac0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
aad0: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
aae0: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
aaf0: 73 20 61 6e 20 38 2d 62 69 74 20 74 77 6f 73 2d  s an 8-bit twos-
ab00: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
ab10: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
ab20: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ab30: 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>2<td valign=
ab40: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
ab50: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
ab60: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69  >.^Value is a bi
ab70: 67 2d 65 6e 64 69 61 6e 20 31 36 2d 62 69 74 20  g-endian 16-bit 
ab80: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
ab90: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
aba0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
abb0: 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20 76 61  n=center>3<td va
abc0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
abd0: 65 6e 74 65 72 3e 33 3c 74 64 20 61 6c 69 67 6e  enter>3<td align
abe0: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
abf0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 32 34   a big-endian 24
ac00: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
ac10: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
ac20: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
ac30: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
ac40: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
ac50: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
ac60: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
ac70: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
ac80: 61 6e 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63  an 32-bit twos-c
ac90: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
aca0: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
acb0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
acc0: 65 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>5<td valign=t
acd0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ace0: 36 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  6<td align=left>
acf0: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
ad00: 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20 74  -endian 48-bit t
ad10: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
ad20: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
ad30: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
ad40: 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c  =center>6<td val
ad50: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ad60: 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  nter>8<td align=
ad70: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
ad80: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 36 34 2d  a big-endian 64-
ad90: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
ada0: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
adb0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
adc0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 3c 74  align=center>7<t
add0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
ade0: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
adf0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
ae00: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
ae10: 6e 20 49 45 45 45 20 37 35 34 2d 32 30 30 38 20  n IEEE 754-2008 
ae20: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
ae30: 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a 3c 74  point number..<t
ae40: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
ae50: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c   align=center>8<
ae60: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
ae70: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
ae80: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
ae90: 75 65 20 69 73 20 74 68 65 20 69 6e 74 65 67 65  ue is the intege
aea0: 72 20 30 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c  r 0. (Only avail
aeb0: 61 62 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d 61  able for [schema
aec0: 20 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20 68   format] 4 and h
aed0: 69 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20  igher.).<tr><td 
aee0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
aef0: 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c  =center>9<td val
af00: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
af10: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
af20: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
af30: 74 68 65 20 69 6e 74 65 67 65 72 20 31 2e 20 28  the integer 1. (
af40: 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66  Only available f
af50: 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61  or [schema forma
af60: 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65 72 2e  t] 4 and higher.
af70: 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ).<tr><td valign
af80: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
af90: 72 3e 31 30 2c 31 31 0a 20 20 20 20 3c 74 64 20  r>10,11.    <td 
afa0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
afb0: 3d 63 65 6e 74 65 72 3e 26 6e 62 73 70 3b 3c 74  =center>&nbsp;<t
afc0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 3c 69  d align=left>.<i
afd0: 3e 4e 6f 74 20 75 73 65 64 2e 20 20 52 65 73 65  >Not used.  Rese
afe0: 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73 69  rved for expansi
aff0: 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e 3c 74 64 20  on.</i>.<tr><td 
b000: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b010: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b020: 3b 31 32 20 61 6e 64 20 65 76 65 6e 0a 20 20 20  ;12 and even.   
b030: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
b040: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d  align=center>(N-
b050: 31 32 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  12)/2<td align=l
b060: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
b070: 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20 28 4e   BLOB that is (N
b080: 2d 31 32 29 2f 32 20 62 79 74 65 73 20 69 6e 20  -12)/2 bytes in 
b090: 6c 65 6e 67 74 68 2e 0a 3c 74 72 3e 3c 74 64 20  length..<tr><td 
b0a0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b0b0: 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35  =center>N&#x2265
b0c0: 3b 31 33 20 61 6e 64 20 6f 64 64 0a 20 20 20 20  ;13 and odd.    
b0d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b0e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31  lign=center>(N-1
b0f0: 33 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  3)/2<td align=le
b100: 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20  ft>.^Value is a 
b110: 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20 5b 74  string in the [t
b120: 65 78 74 20 65 6e 63 6f 64 69 6e 67 5d 20 61 6e  ext encoding] an
b130: 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65 73  d (N-13)/2 bytes
b140: 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 5e 54 68 65   in length..^The
b150: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20   nul terminator 
b160: 69 73 20 6e 6f 74 20 73 74 6f 72 65 64 2e 0a 3c  is not stored..<
b170: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
b180: 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 62  ..<p>Note that b
b190: 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 77 61  ecause of the wa
b1a0: 79 20 76 61 72 69 6e 74 73 20 61 72 65 20 64 65  y varints are de
b1b0: 66 69 6e 65 64 2c 20 74 68 65 20 68 65 61 64 65  fined, the heade
b1c0: 72 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e  r size varint.an
b1d0: 64 20 73 65 72 69 61 6c 20 74 79 70 65 20 76 61  d serial type va
b1e0: 72 69 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c  rints will usual
b1f0: 6c 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20  ly consist of a 
b200: 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
b210: 65 0a 73 65 72 69 61 6c 20 74 79 70 65 20 76 61  e.serial type va
b220: 72 69 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20  rints for large 
b230: 73 74 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42  strings and BLOB
b240: 73 20 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74  s might extend t
b250: 6f 20 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62  o two or three.b
b260: 79 74 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74  yte varints, but
b270: 20 74 68 61 74 20 69 73 20 74 68 65 20 65 78 63   that is the exc
b280: 65 70 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68  eption rather th
b290: 61 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68  an the rule. .Th
b2a0: 65 20 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20  e varint format 
b2b0: 69 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e  is very efficien
b2c0: 74 20 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20  t at coding the 
b2d0: 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f  record header.</
b2e0: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 76 61 6c 75  p>..<p>^The valu
b2f0: 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
b300: 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
b310: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
b320: 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a  low the header..
b330: 5e 28 4e 6f 74 65 20 74 68 61 74 20 66 6f 72 20  ^(Note that for 
b340: 73 65 72 69 61 6c 20 74 79 70 65 73 20 30 2c 20  serial types 0, 
b350: 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20 31 33  8, 9, 12, and 13
b360: 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 7a  , the value is z
b370: 65 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65 6e  ero bytes in.len
b380: 67 74 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f 6c  gth.  If all col
b390: 75 6d 6e 73 20 61 72 65 20 6f 66 20 74 68 65 73  umns are of thes
b3a0: 65 20 74 79 70 65 73 20 74 68 65 6e 20 74 68 65  e types then the
b3b0: 20 62 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f 66   body section of
b3c0: 20 74 68 65 0a 72 65 63 6f 72 64 20 69 73 20 65   the.record is e
b3d0: 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33  mpty.)^</p>..<h3
b3e0: 3e 32 2e 32 20 52 65 63 6f 72 64 20 53 6f 72 74  >2.2 Record Sort
b3f0: 20 4f 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e   Order</h3>..<p>
b400: 54 68 65 20 6f 72 64 65 72 20 6f 66 20 6b 65 79  The order of key
b410: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d  s in an index b-
b420: 74 72 65 65 20 69 73 20 64 65 74 65 72 6d 69 6e  tree is determin
b430: 65 64 20 62 79 20 74 68 65 20 73 6f 72 74 20 6f  ed by the sort o
b440: 72 64 65 72 20 6f 66 0a 74 68 65 20 72 65 63 6f  rder of.the reco
b450: 72 64 73 20 74 68 61 74 20 74 68 65 20 6b 65 79  rds that the key
b460: 73 20 72 65 70 72 65 73 65 6e 74 2e 20 20 52 65  s represent.  Re
b470: 63 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e 20  cord comparison 
b480: 70 72 6f 67 72 65 73 73 65 73 20 63 6f 6c 75 6d  progresses colum
b490: 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f  n.by column.  Co
b4a0: 6c 75 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f 72  lumns of a recor
b4b0: 64 20 61 72 65 20 65 78 61 6d 69 6e 65 64 20 66  d are examined f
b4c0: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
b4d0: 74 2e 20 20 54 68 65 0a 66 69 72 73 74 20 70 61  t.  The.first pa
b4e0: 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  ir of columns th
b4f0: 61 74 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  at are not equal
b500: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
b510: 72 65 6c 61 74 69 76 65 20 6f 72 64 65 72 0a 6f  relative order.o
b520: 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64  f the two record
b530: 73 2e 20 20 54 68 65 20 73 6f 72 74 20 6f 72 64  s.  The sort ord
b540: 65 72 20 6f 66 20 69 6e 64 69 76 69 64 75 61 6c  er of individual
b550: 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66   columns is as.f
b560: 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows:</p>..<ol
b570: 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76 61 6c  >.<li>^(NULL val
b580: 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70 65  ues (serial type
b590: 20 30 29 20 73 6f 72 74 20 66 69 72 73 74 2e 29   0) sort first.)
b5a0: 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69 63 20  ^.<li>^(Numeric 
b5b0: 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74  values (serial t
b5c0: 79 70 65 73 20 31 20 74 68 72 6f 75 67 68 20 39  ypes 1 through 9
b5d0: 29 20 73 6f 72 74 20 61 66 74 65 72 20 4e 55 4c  ) sort after NUL
b5e0: 4c 73 0a 20 20 20 20 20 20 61 6e 64 20 69 6e 20  Ls.      and in 
b5f0: 6e 75 6d 65 72 69 63 20 6f 72 64 65 72 2e 29 5e  numeric order.)^
b600: 0a 3c 6c 69 3e 5e 28 54 65 78 74 20 76 61 6c 75  .<li>^(Text valu
b610: 65 73 20 28 6f 64 64 20 73 65 72 69 61 6c 20 74  es (odd serial t
b620: 79 70 65 73 20 31 33 20 61 6e 64 20 6c 61 72 67  ypes 13 and larg
b630: 65 72 29 20 73 6f 72 74 20 61 66 74 65 72 20 6e  er) sort after n
b640: 75 6d 65 72 69 63 0a 20 20 20 20 76 61 6c 75 65  umeric.    value
b650: 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 64  s in the order d
b660: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
b670: 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61 74   columns [collat
b680: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 2e 29 5e  ing function].)^
b690: 0a 3c 6c 69 3e 5e 28 42 4c 4f 42 20 76 61 6c 75  .<li>^(BLOB valu
b6a0: 65 73 20 28 65 76 65 6e 20 73 65 72 69 61 6c 20  es (even serial 
b6b0: 74 79 70 65 73 20 31 32 20 61 6e 64 20 6c 61 72  types 12 and lar
b6c0: 67 65 72 29 20 73 6f 72 74 20 6c 61 73 74 20 61  ger) sort last a
b6d0: 6e 64 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  nd in the order 
b6e0: 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20  .    determined 
b6f0: 62 79 20 6d 65 6d 63 6d 70 28 29 2e 29 5e 0a 3c  by memcmp().)^.<
b700: 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c 6c  /ol>..<p>A [coll
b710: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 20  ating function] 
b720: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
b730: 69 73 20 6e 65 63 65 73 73 61 72 79 20 69 6e 20  is necessary in 
b740: 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74 65  order to compute
b750: 0a 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 65  .the order of te
b760: 78 74 20 66 69 65 6c 64 73 2e 0a 5e 28 53 51 4c  xt fields..^(SQL
b770: 69 74 65 20 64 65 66 69 6e 65 73 20 74 68 72 65  ite defines thre
b780: 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c 61  e built-in colla
b790: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a 29  ting functions:)
b7a0: 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  ^.</p>..<blockqu
b7b0: 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64 65  ote><table borde
b7c0: 72 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d  r=0 cellspacing=
b7d0: 31 30 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  10>.<tr><td vali
b7e0: 67 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a 20 20  gn=top>BINARY.  
b7f0: 20 20 3c 74 64 3e 20 5e 28 54 68 65 20 62 75 69    <td> ^(The bui
b800: 6c 74 2d 69 6e 20 42 49 4e 41 52 59 20 63 6f 6c  lt-in BINARY col
b810: 6c 61 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  lation compares 
b820: 73 74 72 69 6e 67 73 20 62 79 74 65 20 62 79 20  strings byte by 
b830: 62 79 74 65 0a 20 20 20 20 20 20 20 20 75 73 69  byte.        usi
b840: 6e 67 20 74 68 65 20 6d 65 6d 63 6d 70 28 29 20  ng the memcmp() 
b850: 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20  function.       
b860: 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61   from the standa
b870: 72 64 20 43 20 6c 69 62 72 61 72 79 2e 29 5e 0a  rd C library.)^.
b880: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
b890: 6f 70 3e 4e 4f 43 41 53 45 0a 20 20 20 20 3c 74  op>NOCASE.    <t
b8a0: 64 3e 20 5e 28 54 68 65 20 4e 4f 43 41 53 45 20  d> ^(The NOCASE 
b8b0: 63 6f 6c 6c 61 74 69 6f 6e 20 69 73 20 6c 69 6b  collation is lik
b8c0: 65 20 42 49 4e 41 52 59 20 65 78 63 65 70 74 20  e BINARY except 
b8d0: 74 68 61 74 20 75 70 70 65 72 63 61 73 65 0a 20  that uppercase. 
b8e0: 20 20 20 20 20 20 20 41 53 43 49 49 20 63 68 61         ASCII cha
b8f0: 72 61 63 74 65 72 73 20 28 27 41 27 20 74 68 72  racters ('A' thr
b900: 6f 75 67 68 20 27 5a 27 29 0a 20 20 20 20 20 20  ough 'Z').      
b910: 20 20 61 72 65 20 66 6f 6c 64 65 64 20 69 6e 74    are folded int
b920: 6f 20 74 68 65 69 72 20 6c 6f 77 65 72 63 61 73  o their lowercas
b930: 65 20 65 71 75 69 76 61 6c 65 6e 74 73 20 70 72  e equivalents pr
b940: 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74  ior to running t
b950: 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61  he.        compa
b960: 72 69 73 6f 6e 2e 20 20 4e 6f 74 65 20 74 68 61  rison.  Note tha
b970: 74 20 6f 6e 6c 79 20 41 53 43 49 49 20 63 68 61  t only ASCII cha
b980: 72 61 63 74 65 72 73 20 61 72 65 20 63 61 73 65  racters are case
b990: 2d 66 6f 6c 64 65 64 2e 29 5e 0a 20 20 20 20 20  -folded.)^.     
b9a0: 20 20 20 5e 28 4e 4f 43 41 53 45 0a 20 20 20 20     ^(NOCASE.    
b9b0: 20 20 20 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70      does not imp
b9c0: 6c 65 6d 65 6e 74 20 61 20 67 65 6e 65 72 61 6c  lement a general
b9d0: 20 70 75 72 70 6f 73 65 20 75 6e 69 63 6f 64 65   purpose unicode
b9e0: 20 63 61 73 65 6c 65 73 73 20 63 6f 6d 70 61 72   caseless compar
b9f0: 69 73 6f 6e 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20  ison.)^.<tr><td 
ba00: 76 61 6c 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d  valign=top>RTRIM
ba10: 0a 20 20 20 20 3c 74 64 3e 20 5e 28 52 54 52 49  .    <td> ^(RTRI
ba20: 4d 20 69 73 20 6c 69 6b 65 20 42 49 4e 41 52 59  M is like BINARY
ba30: 20 65 78 63 65 70 74 20 74 68 61 74 20 65 78 74   except that ext
ba40: 72 61 20 73 70 61 63 65 73 20 61 74 20 74 68 65  ra spaces at the
ba50: 20 65 6e 64 20 6f 66 20 65 69 74 68 65 72 0a 20   end of either. 
ba60: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
ba70: 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65  o not change the
ba80: 20 72 65 73 75 6c 74 2e 20 20 49 6e 20 6f 74 68   result.  In oth
ba90: 65 72 20 77 6f 72 64 73 2c 20 73 74 72 69 6e 67  er words, string
baa0: 73 20 77 69 6c 6c 0a 20 20 20 20 20 20 20 20 20  s will.         
bab0: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
bac0: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 20 61 73 20   one another as 
bad0: 6c 6f 6e 67 20 61 73 20 74 68 65 79 0a 20 20 20  long as they.   
bae0: 20 20 20 20 20 20 64 69 66 66 65 72 20 6f 6e 6c        differ onl
baf0: 79 20 69 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  y in the number 
bb00: 6f 66 20 73 70 61 63 65 73 20 61 74 20 74 68 65  of spaces at the
bb10: 20 65 6e 64 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e   end.)^.</table>
bb20: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
bb30: 70 3e 5e 41 64 64 69 74 69 6f 6e 61 6c 20 61 70  p>^Additional ap
bb40: 70 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66  plication-specif
bb50: 69 63 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  ic collating fun
bb60: 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 64  ctions can be ad
bb70: 64 65 64 20 74 6f 0a 53 51 4c 69 74 65 20 75 73  ded to.SQLite us
bb80: 69 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33  ing the [sqlite3
bb90: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
bba0: 6e 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c  n()] interface.<
bbb0: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66  /p>..<p>^The def
bbc0: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66  ault collating f
bbd0: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20  unction for all 
bbe0: 73 74 72 69 6e 67 73 20 69 73 20 42 49 4e 41 52  strings is BINAR
bbf0: 59 2e 0a 5e 41 6c 74 65 72 6e 61 74 69 76 65 20  Y..^Alternative 
bc00: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
bc10: 6f 6e 73 20 66 6f 72 20 74 61 62 6c 65 20 63 6f  ons for table co
bc20: 6c 75 6d 6e 73 20 63 61 6e 20 62 65 20 73 70 65  lumns can be spe
bc30: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
bc40: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
bc50: 74 65 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65  tement using the
bc60: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
bc70: 6f 6e 20 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64  on the [column d
bc80: 65 66 69 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65  efinition]..^Whe
bc90: 6e 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e  n a column is in
bca0: 64 65 78 65 64 2c 20 74 68 65 20 73 61 6d 65 20  dexed, the same 
bcb0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
bcc0: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 20  on specified in 
bcd0: 74 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c  the.[CREATE TABL
bce0: 45 5d 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  E] statement is 
bcf0: 75 73 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6c  used for the col
bd00: 75 6d 6e 20 69 6e 20 74 68 65 20 69 6e 64 65 78  umn in the index
bd10: 2c 20 62 79 20 64 65 66 61 75 6c 74 2c 0a 74 68  , by default,.th
bd20: 6f 75 67 68 20 74 68 69 73 20 63 61 6e 20 62 65  ough this can be
bd30: 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e   overridden usin
bd40: 67 20 61 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  g a COLLATE clau
bd50: 73 65 20 69 6e 20 74 68 65 20 0a 5b 43 52 45 41  se in the .[CREA
bd60: 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d  TE INDEX] statem
bd70: 65 6e 74 2e 0a 0a 3c 68 33 3e 32 2e 33 20 52 65  ent...<h3>2.3 Re
bd80: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20  presentation Of 
bd90: 53 51 4c 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a  SQL Tables</h3>.
bda0: 0a 3c 70 3e 20 5e 45 61 63 68 20 6f 72 64 69 6e  .<p> ^Each ordin
bdb0: 61 72 79 20 53 51 4c 20 74 61 62 6c 65 20 69 6e  ary SQL table in
bdc0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
bdd0: 68 65 6d 61 20 69 73 20 72 65 70 72 65 73 65 6e  hema is represen
bde0: 74 65 64 20 6f 6e 2d 64 69 73 6b 0a 62 79 20 61  ted on-disk.by a
bdf0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 20 20   table b-tree.  
be00: 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74  ^Each entry in t
be10: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  he table b-tree 
be20: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  corresponds to a
be30: 20 72 6f 77 0a 6f 66 20 74 68 65 20 53 51 4c 20   row.of the SQL 
be40: 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 5b 72 6f  table.  ^The [ro
be50: 77 69 64 5d 20 6f 66 20 74 68 65 20 53 51 4c 20  wid] of the SQL 
be60: 74 61 62 6c 65 20 69 73 20 74 68 65 20 36 34 2d  table is the 64-
be70: 62 69 74 20 73 69 67 6e 65 64 0a 69 6e 74 65 67  bit signed.integ
be80: 65 72 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20  er key for each 
be90: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62  entry in the tab
bea0: 6c 65 20 62 2d 74 72 65 65 2e 3c 2f 70 3e 0a 0a  le b-tree.</p>..
beb0: 3c 70 3e 20 5e 54 68 65 20 63 6f 6e 74 65 6e 74  <p> ^The content
bec0: 20 6f 66 20 65 61 63 68 20 53 51 4c 20 74 61 62   of each SQL tab
bed0: 6c 65 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64  le row is stored
bee0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
bef0: 20 66 69 6c 65 20 62 79 0a 66 69 72 73 74 20 63   file by.first c
bf00: 6f 6d 62 69 6e 69 6e 67 20 74 68 65 20 76 61 6c  ombining the val
bf10: 75 65 73 20 69 6e 20 74 68 65 20 76 61 72 69 6f  ues in the vario
bf20: 75 73 20 63 6f 6c 75 6d 6e 73 20 69 6e 74 6f 20  us columns into 
bf30: 61 20 62 79 74 65 20 61 72 72 61 79 0a 69 6e 20  a byte array.in 
bf40: 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61  the record forma
bf50: 74 2c 20 74 68 65 6e 20 73 74 6f 72 69 6e 67 20  t, then storing 
bf60: 74 68 61 74 20 62 79 74 65 20 61 72 72 61 79 20  that byte array 
bf70: 61 73 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69  as the payload i
bf80: 6e 0a 61 6e 20 65 6e 74 72 79 20 69 6e 20 74 68  n.an entry in th
bf90: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 20  e table b-tree. 
bfa0: 20 5e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 76   ^The order of v
bfb0: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
bfc0: 6f 72 64 20 69 73 0a 74 68 65 20 73 61 6d 65 20  ord is.the same 
bfd0: 61 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  as the order of 
bfe0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 53  columns in the S
bff0: 51 4c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  QL table definit
c000: 69 6f 6e 2e 0a 5e 57 68 65 6e 20 61 6e 20 53 51  ion..^When an SQ
c010: 4c 20 74 61 62 6c 65 20 74 68 61 74 20 69 6e 63  L table that inc
c020: 6c 75 64 65 73 20 61 6e 0a 5b 49 4e 54 45 47 45  ludes an.[INTEGE
c030: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63  R PRIMARY KEY] c
c040: 6f 6c 75 6d 6e 20 28 77 68 69 63 68 20 61 6c 69  olumn (which ali
c050: 61 73 65 73 20 74 68 65 20 5b 72 6f 77 69 64 5d  ases the [rowid]
c060: 29 20 74 68 65 6e 20 74 68 61 74 0a 63 6f 6c 75  ) then that.colu
c070: 6d 6e 20 61 70 70 65 61 72 73 20 69 6e 20 74 68  mn appears in th
c080: 65 20 72 65 63 6f 72 64 20 61 73 20 61 20 4e 55  e record as a NU
c090: 4c 4c 20 76 61 6c 75 65 2e 20 20 5e 53 51 4c 69  LL value.  ^SQLi
c0a0: 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 75  te will always u
c0b0: 73 65 0a 74 68 65 20 74 61 62 6c 65 20 62 2d 74  se.the table b-t
c0c0: 72 65 65 20 6b 65 79 20 72 61 74 68 65 72 20 74  ree key rather t
c0d0: 68 61 6e 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c  han the NULL val
c0e0: 75 65 20 77 68 65 6e 20 72 65 66 65 72 65 6e 63  ue when referenc
c0f0: 69 6e 67 20 74 68 65 0a 5b 49 4e 54 45 47 45 52  ing the.[INTEGER
c100: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f   PRIMARY KEY] co
c110: 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  lumn.</p>..<p> ^
c120: 49 66 20 74 68 65 20 5b 61 66 66 69 6e 69 74 79  If the [affinity
c130: 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  ] of a column is
c140: 20 52 45 41 4c 20 61 6e 64 20 74 68 61 74 20 63   REAL and that c
c150: 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61  olumn contains a
c160: 0a 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20  .value that can 
c170: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  be converted to 
c180: 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f  an integer witho
c190: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
c1a0: 6d 61 74 69 6f 6e 0a 28 69 66 20 74 68 65 20 76  mation.(if the v
c1b0: 61 6c 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f  alue contains no
c1c0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
c1d0: 20 61 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f 20   and is not too 
c1e0: 6c 61 72 67 65 20 74 6f 20 62 65 0a 72 65 70 72  large to be.repr
c1f0: 65 73 65 6e 74 65 64 20 61 73 20 61 6e 20 69 6e  esented as an in
c200: 74 65 67 65 72 29 20 74 68 65 6e 20 74 68 65 20  teger) then the 
c210: 63 6f 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73 74  column may be st
c220: 6f 72 65 64 20 69 6e 20 74 68 65 20 72 65 63 6f  ored in the reco
c230: 72 64 0a 61 73 20 61 6e 20 69 6e 74 65 67 65 72  rd.as an integer
c240: 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20  .  ^SQLite will 
c250: 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75  convert the valu
c260: 65 20 62 61 63 6b 20 74 6f 20 66 6c 6f 61 74 69  e back to floati
c270: 6e 67 0a 70 6f 69 6e 74 20 77 68 65 6e 20 65 78  ng.point when ex
c280: 74 72 61 63 74 69 6e 67 20 69 74 20 66 72 6f 6d  tracting it from
c290: 20 74 68 65 20 72 65 63 6f 72 64 2e 3c 2f 70 3e   the record.</p>
c2a0: 0a 0a 3c 68 33 3e 32 2e 34 20 52 65 70 72 65 73  ..<h3>2.4 Repres
c2b0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 57 49 54 48  entation of WITH
c2c0: 4f 55 54 20 52 4f 57 49 44 20 54 61 62 6c 65 73  OUT ROWID Tables
c2d0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  </h3>..<p>^If an
c2e0: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 63 72   SQL table is cr
c2f0: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
c300: 22 57 49 54 48 4f 55 54 20 52 4f 57 49 44 22 20  "WITHOUT ROWID" 
c310: 63 6c 61 75 73 65 20 61 74 20 74 68 65 0a 65 6e  clause at the.en
c320: 64 20 6f 66 20 69 74 73 20 43 52 45 41 54 45 20  d of its CREATE 
c330: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c  TABLE statement,
c340: 20 74 68 65 6e 20 74 68 61 74 20 74 61 62 6c 65   then that table
c350: 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52   is a [WITHOUT R
c360: 4f 57 49 44 5d 0a 74 61 62 6c 65 20 61 6e 64 20  OWID].table and 
c370: 75 73 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  uses a different
c380: 20 6f 6e 2d 64 69 73 6b 20 72 65 70 72 65 73 65   on-disk represe
c390: 6e 74 61 74 69 6f 6e 2e 20 20 5e 41 20 57 49 54  ntation.  ^A WIT
c3a0: 48 4f 55 54 20 52 4f 57 49 44 0a 74 61 62 6c 65  HOUT ROWID.table
c3b0: 20 75 73 65 73 20 61 6e 20 69 6e 64 65 78 20 62   uses an index b
c3c0: 2d 74 72 65 65 20 72 61 74 68 65 72 20 74 68 61  -tree rather tha
c3d0: 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  n a table b-tree
c3e0: 20 66 6f 72 20 73 74 6f 72 61 67 65 2e 0a 5e 54   for storage..^T
c3f0: 68 65 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20  he key for each 
c400: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 57 49 54  entry in the WIT
c410: 48 4f 55 54 20 52 4f 57 49 44 20 62 2d 74 72 65  HOUT ROWID b-tre
c420: 65 20 69 73 20 61 20 72 65 63 6f 72 64 20 63 6f  e is a record co
c430: 6d 70 6f 73 65 64 0a 6f 66 20 74 68 65 20 63 6f  mposed.of the co
c440: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 50 52 49  lumns of the PRI
c450: 4d 41 52 59 20 4b 45 59 20 66 6f 6c 6c 6f 77 65  MARY KEY followe
c460: 64 20 62 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69  d by all remaini
c470: 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68  ng columns of.th
c480: 65 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 70  e table.  ^The p
c490: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
c4a0: 6e 73 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ns appear in the
c4b0: 20 6f 72 64 65 72 20 74 68 65 79 20 74 68 65 79   order they they
c4c0: 20 77 65 72 65 0a 64 65 63 6c 61 72 65 64 20 69   were.declared i
c4d0: 6e 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  n the PRIMARY KE
c4e0: 59 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65  Y clause and the
c4f0: 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d   remaining colum
c500: 6e 73 20 61 70 70 65 61 72 20 69 6e 0a 74 68 65  ns appear in.the
c510: 20 6f 72 64 65 72 20 74 68 65 79 20 6f 63 63 75   order they occu
c520: 72 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  r in the CREATE 
c530: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
c540: 0a 0a 3c 70 3e 5e 48 65 6e 63 65 2c 20 74 68 65  ..<p>^Hence, the
c550: 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e   content encodin
c560: 67 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  g for a WITHOUT 
c570: 52 4f 57 49 44 20 74 61 62 6c 65 20 69 73 20 74  ROWID table is t
c580: 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 63  he same.as the c
c590: 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20  ontent encoding 
c5a0: 66 6f 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  for an ordinary 
c5b0: 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 65 78 63  rowid table, exc
c5c0: 65 70 74 20 74 68 61 74 20 74 68 65 0a 6f 72 64  ept that the.ord
c5d0: 65 72 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  er of the column
c5e0: 73 20 69 73 20 72 65 61 72 72 61 6e 67 65 64 20  s is rearranged 
c5f0: 73 6f 20 74 68 61 74 20 50 52 49 4d 41 52 59 20  so that PRIMARY 
c600: 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65  KEY columns come
c610: 0a 66 69 72 73 74 2c 20 61 6e 64 20 74 68 65 20  .first, and the 
c620: 63 6f 6e 74 65 6e 74 20 69 73 20 75 73 65 64 20  content is used 
c630: 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 61 6e  as the key in an
c640: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 72 61   index b-tree ra
c650: 74 68 65 72 0a 74 68 61 6e 20 61 73 20 74 68 65  ther.than as the
c660: 20 64 61 74 61 20 69 6e 20 61 20 74 61 62 6c 65   data in a table
c670: 20 62 2d 74 72 65 65 2e 0a 5e 54 68 65 20 73 70   b-tree..^The sp
c680: 65 63 69 61 6c 20 65 6e 63 6f 64 69 6e 67 20 72  ecial encoding r
c690: 75 6c 65 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73  ules for columns
c6a0: 20 77 69 74 68 20 52 45 41 4c 20 61 66 66 69 6e   with REAL affin
c6b0: 69 74 79 0a 61 70 70 6c 79 20 74 6f 20 57 49 54  ity.apply to WIT
c6c0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
c6d0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
c6e0: 65 79 20 64 6f 20 77 69 74 68 20 72 6f 77 69 64  ey do with rowid
c6f0: 20 74 61 62 6c 65 73 2e 0a 0a 3c 68 33 3e 32 2e   tables...<h3>2.
c700: 35 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  5 Representation
c710: 20 4f 66 20 53 51 4c 20 49 6e 64 69 63 65 73 3c   Of SQL Indices<
c720: 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 53  /h3>..<p>^Each S
c730: 51 4c 20 69 6e 64 65 78 2c 20 77 68 65 74 68 65  QL index, whethe
c740: 72 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63  r explicitly dec
c750: 6c 61 72 65 64 20 76 69 61 20 61 20 5b 43 52 45  lared via a [CRE
c760: 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65  ATE INDEX] state
c770: 6d 65 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64 20  ment.or implied 
c780: 62 79 20 61 20 55 4e 49 51 55 45 20 6f 72 20 50  by a UNIQUE or P
c790: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
c7a0: 72 61 69 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e  raint, correspon
c7b0: 64 73 20 74 6f 20 61 6e 20 0a 69 6e 64 65 78 20  ds to an .index 
c7c0: 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64 61  b-tree in the da
c7d0: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e 45 61  tabase file..^Ea
c7e0: 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  ch entry in the 
c7f0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63 6f 72  index b-tree cor
c800: 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 73 69  responds to a si
c810: 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74 68 65 20  ngle row in the 
c820: 0a 61 73 73 6f 63 69 61 74 65 64 20 53 51 4c 20  .associated SQL 
c830: 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6b 65 79 20  table..^The key 
c840: 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  to an index b-tr
c850: 65 65 20 69 73 0a 61 20 72 65 63 6f 72 64 20 63  ee is.a record c
c860: 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20 63  omposed of the c
c870: 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20  olumns that are 
c880: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 66 6f  being indexed fo
c890: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a 6b 65  llowed by the.ke
c8a0: 79 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  y of the corresp
c8b0: 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 72 6f 77  onding table row
c8c0: 2e 20 20 46 6f 72 20 6f 72 64 69 6e 61 72 79 20  .  For ordinary 
c8d0: 74 61 62 6c 65 73 2c 20 74 68 65 20 72 6f 77 20  tables, the row 
c8e0: 6b 65 79 20 69 73 0a 74 68 65 20 5b 72 6f 77 69  key is.the [rowi
c8f0: 64 5d 2c 20 61 6e 64 20 66 6f 72 20 5b 57 49 54  d], and for [WIT
c900: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
c910: 65 73 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69  es the row key i
c920: 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
c930: 59 2e 0a 42 65 63 61 75 73 65 20 65 76 65 72 79  Y..Because every
c940: 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c   row in the tabl
c950: 65 20 68 61 73 20 61 20 75 6e 69 71 75 65 20 72  e has a unique r
c960: 6f 77 20 6b 65 79 2c 0a 61 6c 6c 20 6b 65 79 73  ow key,.all keys
c970: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 61 72 65   in an index are
c980: 20 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70   unique.</p>..<p
c990: 3e 5e 49 6e 20 61 20 6e 6f 72 6d 61 6c 20 69 6e  >^In a normal in
c9a0: 64 65 78 2c 20 74 68 65 72 65 20 69 73 20 61 20  dex, there is a 
c9b0: 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69  one-to-one mappi
c9c0: 6e 67 20 62 65 74 77 65 65 6e 20 72 6f 77 73 20  ng between rows 
c9d0: 69 6e 20 61 20 0a 74 61 62 6c 65 20 61 6e 64 20  in a .table and 
c9e0: 65 6e 74 72 69 65 73 20 69 6e 20 65 61 63 68 20  entries in each 
c9f0: 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
ca00: 20 77 69 74 68 20 74 68 61 74 20 74 61 62 6c 65   with that table
ca10: 2e 0a 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 61  ..^However, in a
ca20: 20 5b 70 61 72 74 69 61 6c 20 69 6e 64 65 78 5d   [partial index]
ca30: 2c 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72  , the index b-tr
ca40: 65 65 20 6f 6e 6c 79 20 63 6f 6e 74 61 69 6e 73  ee only contains
ca50: 20 65 6e 74 72 69 65 73 0a 63 6f 72 72 65 73 70   entries.corresp
ca60: 6f 6e 64 69 6e 67 20 74 6f 20 74 61 62 6c 65 20  onding to table 
ca70: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
ca80: 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
ca90: 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74 68  expression on th
caa0: 65 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  e.CREATE INDEX s
cab0: 74 61 74 65 6d 65 6e 74 20 69 73 20 74 72 75 65  tatement is true
cac0: 2e 0a 5e 43 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ..^Corresponding
cad0: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
cae0: 65 78 20 61 6e 64 20 74 61 62 6c 65 20 62 2d 74  ex and table b-t
caf0: 72 65 65 73 20 73 68 61 72 65 20 74 68 65 20 73  rees share the s
cb00: 61 6d 65 20 72 6f 77 69 64 0a 6f 72 20 70 72 69  ame rowid.or pri
cb10: 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 20  mary key values 
cb20: 61 6e 64 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  and contain the 
cb30: 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 61  same value for a
cb40: 6c 6c 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  ll indexed colum
cb50: 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 32 2e 35  ns.</p>..<h4>2.5
cb60: 2e 31 20 53 75 70 70 72 65 73 73 69 6f 6e 20 6f  .1 Suppression o
cb70: 66 20 72 65 64 75 6e 64 61 6e 74 20 63 6f 6c 75  f redundant colu
cb80: 6d 6e 73 20 69 6e 20 57 49 54 48 4f 55 54 20 52  mns in WITHOUT R
cb90: 4f 57 49 44 20 73 65 63 6f 6e 64 61 72 79 20 69  OWID secondary i
cba0: 6e 64 65 78 65 64 0a 3c 2f 68 34 3e 0a 0a 3c 70  ndexed.</h4>..<p
cbb0: 3e 20 5e 49 6e 20 61 6e 20 69 6e 64 65 78 20 6f  > ^In an index o
cbc0: 6e 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49  n a WITHOUT ROWI
cbd0: 44 20 74 61 62 6c 65 2c 20 69 66 20 6f 6e 65 20  D table, if one 
cbe0: 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 63  or more of the c
cbf0: 6f 6c 75 6d 6e 73 0a 6f 66 20 74 61 62 6c 65 20  olumns.of table 
cc00: 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72 65 20  PRIMARY KEY are 
cc10: 61 6c 73 6f 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  also columns of 
cc20: 74 68 65 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  the index, then 
cc30: 74 68 65 0a 69 6e 64 65 78 65 64 20 63 6f 6c 75  the.indexed colu
cc40: 6d 6e 20 69 73 20 6e 6f 74 20 72 65 70 65 61 74  mn is not repeat
cc50: 65 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2d  ed in the table-
cc60: 6b 65 79 20 73 75 66 66 69 78 20 6f 6e 20 74 68  key suffix on th
cc70: 65 20 65 6e 64 20 6f 66 0a 74 68 65 20 69 6e 64  e end of.the ind
cc80: 65 78 20 72 65 63 6f 72 64 2e 20 20 5e 28 41 73  ex record.  ^(As
cc90: 20 61 6e 20 65 78 61 6d 70 6c 65 2c 20 63 6f 6e   an example, con
cca0: 73 69 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77  sider the follow
ccb0: 69 6e 67 20 53 51 4c 3a 0a 0a 3c 62 6c 6f 63 6b  ing SQL:..<block
ccc0: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
ccd0: 54 45 20 54 41 42 4c 45 20 65 78 32 35 28 61 2c  TE TABLE ex25(a,
cce0: 62 2c 63 2c 64 2c 65 2c 50 52 49 4d 41 52 59 20  b,c,d,e,PRIMARY 
ccf0: 4b 45 59 28 64 2c 63 2c 61 29 29 20 57 49 54 48  KEY(d,c,a)) WITH
cd00: 4f 55 54 20 72 6f 77 69 64 3b 0a 43 52 45 41 54  OUT rowid;.CREAT
cd10: 45 20 49 4e 44 45 58 20 65 78 32 35 63 65 20 4f  E INDEX ex25ce O
cd20: 4e 20 65 78 32 35 28 63 2c 65 29 3b 0a 43 52 45  N ex25(c,e);.CRE
cd30: 41 54 45 20 49 4e 44 45 58 20 65 78 32 35 61 63  ATE INDEX ex25ac
cd40: 64 65 20 4f 4e 20 65 78 32 35 28 61 2c 63 2c 64  de ON ex25(a,c,d
cd50: 2c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  ,e);.</pre></blo
cd60: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 45 61 63  ckquote>..<p>Eac
cd70: 68 20 72 6f 77 20 69 6e 20 74 68 65 20 65 78 32  h row in the ex2
cd80: 35 63 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  5ce index of the
cd90: 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 63   example above c
cda0: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 72 65 63  onsists of a rec
cdb0: 6f 72 64 0a 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ord.containing t
cdc0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6c  he following col
cdd0: 75 6d 6e 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61  umns: c, e, d, a
cde0: 2e 20 20 54 68 65 20 66 69 72 73 74 20 74 77 6f  .  The first two
cdf0: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65   columns are.the
ce00: 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69   columns being i
ce10: 6e 64 65 78 65 64 2c 20 63 20 61 6e 64 20 65 2e  ndexed, c and e.
ce20: 20 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20    The remaining 
ce30: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 74 68 65 20  columns are the 
ce40: 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74  primary.key of t
ce50: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
ce60: 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72   table row.  Nor
ce70: 6d 61 6c 6c 79 2c 20 74 68 65 20 70 72 69 6d 61  mally, the prima
ce80: 72 79 20 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a  ry key would be.
ce90: 63 6f 6c 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e  columns d, c, an
cea0: 64 20 61 2c 20 62 75 74 20 62 65 63 61 75 73 65  d a, but because
ceb0: 20 63 6f 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64   column c alread
cec0: 79 20 61 70 70 65 61 72 73 20 65 61 72 6c 69 65  y appears earlie
ced0: 72 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20  r in the.index, 
cee0: 69 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  it is omitted fr
cef0: 6f 6d 20 74 68 65 20 6b 65 79 20 73 75 66 66 69  om the key suffi
cf00: 78 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49  x.)^</p>..<p>^(I
cf10: 6e 20 74 68 65 20 65 78 74 72 65 6d 65 20 63 61  n the extreme ca
cf20: 73 65 20 77 68 65 72 65 20 74 68 65 20 63 6f 6c  se where the col
cf30: 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78  umns being index
cf40: 65 64 20 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c  ed cover all col
cf50: 75 6d 6e 73 0a 6f 66 20 74 68 65 20 50 52 49 4d  umns.of the PRIM
cf60: 41 52 59 20 4b 45 59 2c 20 74 68 65 20 69 6e 64  ARY KEY, the ind
cf70: 65 78 20 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20  ex will consist 
cf80: 6f 66 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75  of only the colu
cf90: 6d 6e 73 20 62 65 69 6e 67 0a 69 6e 64 65 78 65  mns being.indexe
cfa0: 64 2e 20 20 54 68 65 20 65 78 32 35 61 63 64 65  d.  The ex25acde
cfb0: 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 64   example above d
cfc0: 65 6d 6f 6e 73 74 72 61 74 65 73 20 74 68 69 73  emonstrates this
cfd0: 2e 29 5e 20 20 5e 45 61 63 68 20 65 6e 74 72 79  .)^  ^Each entry
cfe0: 20 69 6e 0a 74 68 65 20 65 78 32 35 61 63 64 65   in.the ex25acde
cff0: 20 69 6e 64 65 78 20 63 6f 6e 73 69 73 74 73 20   index consists 
d000: 6f 66 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75  of only the colu
d010: 6d 6e 73 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64  mns a, c, d, and
d020: 20 65 2c 20 69 6e 20 74 68 61 74 0a 6f 72 64 65   e, in that.orde
d030: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  r.</p>..<p> ^The
d040: 20 73 75 70 70 72 65 73 73 69 6f 6e 20 6f 66 20   suppression of 
d050: 72 65 64 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e  redundant column
d060: 73 20 69 6e 20 74 68 65 20 6b 65 79 20 73 75 66  s in the key suf
d070: 66 69 78 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a  fix of an index.
d080: 65 6e 74 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72  entry only occur
d090: 73 20 69 6e 20 57 49 54 48 4f 55 54 20 52 4f 57  s in WITHOUT ROW
d0a0: 49 44 20 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20  ID tables.  ^In 
d0b0: 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69  an ordinary rowi
d0c0: 64 20 74 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64  d table,.the ind
d0d0: 65 78 20 65 6e 74 72 79 20 61 6c 77 61 79 73 20  ex entry always 
d0e0: 65 6e 64 73 20 77 69 74 68 20 74 68 65 20 72 6f  ends with the ro
d0f0: 77 69 64 20 65 76 65 6e 20 69 66 20 74 68 65 20  wid even if the 
d100: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
d110: 20 4b 45 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20   KEY].column is 
d120: 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  one of the colum
d130: 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  ns being indexed
d140: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
d150: 72 61 67 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d  ragment sqlite_m
d160: 61 73 74 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61  aster {sqlite_ma
d170: 73 74 65 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61  ster} {sqlite_ma
d180: 73 74 65 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c  ster table}</tcl
d190: 3e 0a 3c 68 33 3e 32 2e 36 20 53 74 6f 72 61 67  >.<h3>2.6 Storag
d1a0: 65 20 4f 66 20 54 68 65 20 53 51 4c 20 44 61 74  e Of The SQL Dat
d1b0: 61 62 61 73 65 20 53 63 68 65 6d 61 3c 2f 68 33  abase Schema</h3
d1c0: 3e 0a 0a 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66  >..<p>^Page 1 of
d1d0: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
d1e0: 20 69 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   is the root pag
d1f0: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74  e of a table b-t
d200: 72 65 65 20 74 68 61 74 0a 68 6f 6c 64 73 20 61  ree that.holds a
d210: 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 6e   special table n
d220: 61 6d 65 64 20 22 73 71 6c 69 74 65 5f 6d 61 73  amed "sqlite_mas
d230: 74 65 72 22 20 28 6f 72 20 22 73 71 6c 69 74 65  ter" (or "sqlite
d240: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e  _temp_master" in
d250: 0a 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 54  .the case of a T
d260: 45 4d 50 20 64 61 74 61 62 61 73 65 29 20 77 68  EMP database) wh
d270: 69 63 68 20 73 74 6f 72 65 73 20 74 68 65 20 63  ich stores the c
d280: 6f 6d 70 6c 65 74 65 0a 64 61 74 61 62 61 73 65  omplete.database
d290: 20 73 63 68 65 6d 61 2e 20 20 5e 28 54 68 65 20   schema.  ^(The 
d2a0: 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65  structure of the
d2b0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
d2c0: 61 62 6c 65 20 69 73 20 61 73 0a 69 66 20 69 74  able is as.if it
d2d0: 20 68 61 64 20 62 65 65 6e 20 63 72 65 61 74 65   had been create
d2e0: 64 20 75 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c  d using the foll
d2f0: 6f 77 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a  owing SQL:</p>..
d300: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
d310: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
d320: 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 0a 20 20  qlite_master(.  
d330: 74 79 70 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d  type text,.  nam
d340: 65 20 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61  e text,.  tbl_na
d350: 6d 65 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70  me text,.  rootp
d360: 61 67 65 20 69 6e 74 65 67 65 72 2c 0a 20 20 73  age integer,.  s
d370: 71 6c 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65  ql text.);.</pre
d380: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e  ></blockquote>)^
d390: 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65  ..<p>^The sqlite
d3a0: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f  _master table co
d3b0: 6e 74 61 69 6e 73 20 6f 6e 65 20 72 6f 77 20 66  ntains one row f
d3c0: 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2c 20 69  or each table, i
d3d0: 6e 64 65 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20  ndex, view,.and 
d3e0: 74 72 69 67 67 65 72 20 28 63 6f 6c 6c 65 63 74  trigger (collect
d3f0: 69 76 65 6c 79 20 22 6f 62 6a 65 63 74 73 22 29  ively "objects")
d400: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
d410: 20 73 63 68 65 6d 61 2c 20 65 78 63 65 70 74 20   schema, except 
d420: 74 68 65 72 65 0a 69 73 20 6e 6f 20 65 6e 74 72  there.is no entr
d430: 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  y for the sqlite
d440: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 74  _master table it
d450: 73 65 6c 66 2e 20 20 5e 54 68 65 20 73 71 6c 69  self.  ^The sqli
d460: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 0a  te_master table.
d470: 63 6f 6e 74 61 69 6e 73 20 65 6e 74 72 69 65 73  contains entries
d480: 20 66 6f 72 20 5b 69 6e 74 65 72 6e 61 6c 20 73   for [internal s
d490: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 5d 20 69  chema objects] i
d4a0: 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 61 70  n addition to ap
d4b0: 70 6c 69 63 61 74 69 6f 6e 2d 0a 61 6e 64 20 70  plication-.and p
d4c0: 72 6f 67 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65  rogrammer-define
d4d0: 64 20 6f 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e  d objects....<p>
d4e0: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
d4f0: 74 65 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20  ter.type column 
d500: 77 69 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74  will be one.of t
d510: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78  he following tex
d520: 74 20 73 74 72 69 6e 67 73 3a 20 20 27 74 61 62  t strings:  'tab
d530: 6c 65 27 2c 20 27 69 6e 64 65 78 27 2c 20 27 76  le', 'index', 'v
d540: 69 65 77 27 2c 20 6f 72 20 27 74 72 69 67 67 65  iew', or 'trigge
d550: 72 27 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  r'.according to 
d560: 74 68 65 20 74 79 70 65 20 6f 66 20 6f 62 6a 65  the type of obje
d570: 63 74 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  ct defined.  The
d580: 20 27 74 61 62 6c 65 27 20 73 74 72 69 6e 67 20   'table' string 
d590: 69 73 20 75 73 65 64 0a 66 6f 72 20 62 6f 74 68  is used.for both
d5a0: 20 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 5b 76   ordinary and [v
d5b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29  irtual tables].)
d5c0: 5e 3c 2f 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65  ^</p>..</p>^(The
d5d0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e   sqlite_master.n
d5e0: 61 6d 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20  ame column will 
d5f0: 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 20 6f 66  hold the name of
d600: 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e   the object.)^.^
d610: 28 5b 55 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50  ([UNIQUE] and [P
d620: 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73  RIMARY KEY] cons
d630: 74 72 61 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65  traints on table
d640: 73 20 63 61 75 73 65 20 53 51 4c 69 74 65 20 74  s cause SQLite t
d650: 6f 20 63 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e  o create.[intern
d660: 61 6c 20 69 6e 64 65 78 65 73 5d 20 77 69 74 68  al indexes] with
d670: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f   names of the fo
d680: 72 6d 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69  rm "sqlite_autoi
d690: 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68  ndex_TABLE_N".wh
d6a0: 65 72 65 20 54 41 42 4c 45 20 69 73 20 72 65 70  ere TABLE is rep
d6b0: 6c 61 63 65 64 20 62 79 20 74 68 65 20 6e 61 6d  laced by the nam
d6c0: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
d6d0: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
d6e0: 0a 63 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64 20  .constraint and 
d6f0: 4e 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  N is an integer 
d700: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
d710: 20 61 6e 64 20 69 6e 63 72 65 61 73 69 6e 67 20   and increasing 
d720: 62 79 20 6f 6e 65 0a 77 69 74 68 20 65 61 63 68  by one.with each
d730: 20 63 6f 6e 73 74 72 61 69 6e 74 20 73 65 65 6e   constraint seen
d740: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 64 65   in the table de
d750: 66 69 6e 69 74 69 6f 6e 2e 29 5e 0a 5e 28 49 6e  finition.)^.^(In
d760: 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
d770: 44 5d 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20  D] table, there 
d780: 69 73 20 6e 6f 20 73 71 6c 69 74 65 5f 6d 61 73  is no sqlite_mas
d790: 74 65 72 20 65 6e 74 72 79 20 66 6f 72 20 74 68  ter entry for th
d7a0: 65 0a 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  e.PRIMARY KEY, b
d7b0: 75 74 20 74 68 65 20 22 73 71 6c 69 74 65 5f 61  ut the "sqlite_a
d7c0: 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e  utoindex_TABLE_N
d7d0: 22 20 6e 61 6d 65 20 69 73 20 73 65 74 20 61 73  " name is set as
d7e0: 69 64 65 0a 66 6f 72 20 74 68 65 20 50 52 49 4d  ide.for the PRIM
d7f0: 41 52 59 20 4b 45 59 20 61 73 20 69 66 20 74 68  ARY KEY as if th
d800: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
d810: 65 6e 74 72 79 20 64 69 64 20 65 78 69 73 74 2e  entry did exist.
d820: 20 20 54 68 69 73 0a 77 69 6c 6c 20 61 66 66 65    This.will affe
d830: 63 74 20 74 68 65 20 6e 75 6d 62 65 72 69 6e 67  ct the numbering
d840: 20 6f 66 20 73 75 62 73 65 71 75 65 6e 74 20 55   of subsequent U
d850: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
d860: 73 2e 29 5e 0a 5e 54 68 65 20 22 73 71 6c 69 74  s.)^.^The "sqlit
d870: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c  e_autoindex_TABL
d880: 45 5f 4e 22 20 6e 61 6d 65 20 69 73 20 6e 65 76  E_N" name is nev
d890: 65 72 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  er allocated for
d8a0: 20 61 6e 0a 5b 49 4e 54 45 47 45 52 20 50 52 49   an.[INTEGER PRI
d8b0: 4d 41 52 59 20 4b 45 59 5d 2c 20 65 69 74 68 65  MARY KEY], eithe
d8c0: 72 20 69 6e 20 72 6f 77 69 64 20 74 61 62 6c 65  r in rowid table
d8d0: 73 20 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57  s or WITHOUT ROW
d8e0: 49 44 20 74 61 62 6c 65 73 2e 0a 3c 2f 70 3e 0a  ID tables..</p>.
d8f0: 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d  .<p>The sqlite_m
d900: 61 73 74 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63  aster.tbl_name c
d910: 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20  olumn holds the 
d920: 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20  name of a table 
d930: 6f 72 20 76 69 65 77 0a 74 68 61 74 20 74 68 65  or view.that the
d940: 20 6f 62 6a 65 63 74 20 69 73 20 61 73 73 6f 63   object is assoc
d950: 69 61 74 65 64 20 77 69 74 68 2e 20 20 5e 46 6f  iated with.  ^Fo
d960: 72 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65  r a table or vie
d970: 77 2c 20 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20  w, the.tbl_name 
d980: 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70 79  column is a copy
d990: 20 6f 66 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c   of the name col
d9a0: 75 6d 6e 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e  umn.  ^For an in
d9b0: 64 65 78 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d  dex, the tbl_nam
d9c0: 65 0a 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  e.is the name of
d9d0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
d9e0: 69 73 20 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f  is indexed.  ^Fo
d9f0: 72 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65  r a trigger, the
da00: 20 74 62 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e   tbl_name.column
da10: 20 73 74 6f 72 65 73 20 74 68 65 20 6e 61 6d 65   stores the name
da20: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
da30: 20 76 69 65 77 20 74 68 61 74 20 63 61 75 73 65   view that cause
da40: 73 20 74 68 65 20 74 72 69 67 67 65 72 20 0a 74  s the trigger .t
da50: 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  o fire.</p>..<p>
da60: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
da70: 74 65 72 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c  ter.rootpage col
da80: 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65 20 70  umn stores the p
da90: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
daa0: 65 20 72 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61  e root.b-tree pa
dab0: 67 65 20 66 6f 72 20 74 61 62 6c 65 73 20 61 6e  ge for tables an
dac0: 64 20 69 6e 64 65 78 65 73 2e 29 5e 20 20 5e 46  d indexes.)^  ^F
dad0: 6f 72 20 72 6f 77 73 20 74 68 61 74 20 64 65 66  or rows that def
dae0: 69 6e 65 20 76 69 65 77 73 2c 20 74 72 69 67 67  ine views, trigg
daf0: 65 72 73 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c  ers,.and virtual
db00: 20 74 61 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f   tables, the roo
db10: 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20  tpage column is 
db20: 30 20 6f 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a  0 or NULL.</p>..
db30: 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  <p>^(The sqlite_
db40: 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d  master.sql colum
db50: 6e 20 73 74 6f 72 65 73 20 53 51 4c 20 74 65 78  n stores SQL tex
db60: 74 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  t that describes
db70: 20 74 68 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68   the.object.  Th
db80: 69 73 20 53 51 4c 20 74 65 78 74 20 69 73 20 61  is SQL text is a
db90: 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d 2c   [CREATE TABLE],
dba0: 20 5b 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   [CREATE VIRTUAL
dbb0: 20 54 41 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45   TABLE],.[CREATE
dbc0: 20 49 4e 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45   INDEX],.[CREATE
dbd0: 20 56 49 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41   VIEW], or [CREA
dbe0: 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61 74  TE TRIGGER] stat
dbf0: 65 6d 65 6e 74 20 74 68 61 74 20 69 66 20 65 76  ement that if ev
dc00: 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74 0a  aluated against.
dc10: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
dc20: 65 20 77 68 65 6e 20 69 74 20 69 73 20 74 68 65  e when it is the
dc30: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 6f   main database o
dc40: 66 20 61 20 5b 64 61 74 61 62 61 73 65 20 63 6f  f a [database co
dc50: 6e 6e 65 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20  nnection].would 
dc60: 72 65 63 72 65 61 74 65 64 20 74 68 65 20 6f 62  recreated the ob
dc70: 6a 65 63 74 2e 29 5e 20 20 54 68 65 20 74 65 78  ject.)^  The tex
dc80: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61 20 63  t is usually a c
dc90: 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69  opy of the origi
dca0: 6e 61 6c 0a 73 74 61 74 65 6d 65 6e 74 20 75 73  nal.statement us
dcb0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
dcc0: 20 6f 62 6a 65 63 74 20 62 75 74 20 77 69 74 68   object but with
dcd0: 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 73 20   normalizations 
dce0: 61 70 70 6c 69 65 64 20 73 6f 0a 74 68 61 74 20  applied so.that 
dcf0: 74 68 65 20 74 65 78 74 20 63 6f 6e 66 6f 72 6d  the text conform
dd00: 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  s to the followi
dd10: 6e 67 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a  ng rules:..<ul>.
dd20: 3c 6c 69 3e 5e 54 68 65 20 43 52 45 41 54 45 2c  <li>^The CREATE,
dd30: 20 54 41 42 4c 45 2c 20 56 49 45 57 2c 20 54 52   TABLE, VIEW, TR
dd40: 49 47 47 45 52 2c 20 61 6e 64 20 49 4e 44 45 58  IGGER, and INDEX
dd50: 20 6b 65 79 77 6f 72 64 73 20 61 74 20 74 68 65   keywords at the
dd60: 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68   beginning.of th
dd70: 65 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65 20  e statement are 
dd80: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c 6c  converted to all
dd90: 20 75 70 70 65 72 20 63 61 73 65 20 6c 65 74 74   upper case lett
dda0: 65 72 73 2e 0a 3c 6c 69 3e 5e 54 68 65 20 54 45  ers..<li>^The TE
ddb0: 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20  MP or TEMPORARY 
ddc0: 6b 65 79 77 6f 72 64 20 69 73 20 72 65 6d 6f 76  keyword is remov
ddd0: 65 64 20 69 66 20 69 74 20 6f 63 63 75 72 73 20  ed if it occurs 
dde0: 61 66 74 65 72 20 74 68 65 20 0a 69 6e 69 74 69  after the .initi
ddf0: 61 6c 20 43 52 45 41 54 45 20 6b 65 79 77 6f 72  al CREATE keywor
de00: 64 2e 0a 3c 6c 69 3e 5e 41 6e 79 20 64 61 74 61  d..<li>^Any data
de10: 62 61 73 65 20 6e 61 6d 65 20 71 75 61 6c 69 66  base name qualif
de20: 69 65 72 20 74 68 61 74 20 6f 63 63 75 72 73 20  ier that occurs 
de30: 70 72 69 6f 72 20 74 6f 20 74 68 65 20 6e 61 6d  prior to the nam
de40: 65 20 6f 66 20 74 68 65 0a 6f 62 6a 65 63 74 20  e of the.object 
de50: 62 65 69 6e 67 20 63 72 65 61 74 65 64 20 69 73  being created is
de60: 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c   removed..<li>^L
de70: 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 61 72  eading spaces ar
de80: 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e  e removed..<li>^
de90: 41 6c 6c 20 73 70 61 63 65 73 20 66 6f 6c 6c 6f  All spaces follo
dea0: 77 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 74  wing the first t
deb0: 77 6f 20 6b 65 79 77 6f 72 64 73 20 61 72 65 20  wo keywords are 
dec0: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
ded0: 20 73 69 6e 67 6c 65 0a 73 70 61 63 65 2e 0a 3c   single.space..<
dee0: 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 74  /ul>..<p>^(The t
def0: 65 78 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74  ext in the sqlit
df00: 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c  e_master.sql col
df10: 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66  umn is a copy of
df20: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 43 52   the original.CR
df30: 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 74  EATE statement t
df40: 65 78 74 20 74 68 61 74 20 63 72 65 61 74 65 64  ext that created
df50: 20 74 68 65 20 6f 62 6a 65 63 74 2c 20 65 78 63   the object, exc
df60: 65 70 74 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 61  ept normalized a
df70: 73 0a 64 65 73 63 72 69 62 65 64 20 61 62 6f 76  s.described abov
df80: 65 20 61 6e 64 20 61 73 20 6d 6f 64 69 66 69 65  e and as modifie
df90: 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20  d by subsequent 
dfa0: 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 73 74  [ALTER TABLE] st
dfb0: 61 74 65 6d 65 6e 74 73 2e 29 5e 0a 5e 28 54 68  atements.)^.^(Th
dfc0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
dfd0: 73 71 6c 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20  sql is NULL for 
dfe0: 74 68 65 20 5b 69 6e 74 65 72 6e 61 6c 20 69 6e  the [internal in
dff0: 64 65 78 65 73 5d 20 74 68 61 74 20 61 72 65 0a  dexes] that are.
e000: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
e010: 65 61 74 65 64 20 62 79 20 5b 55 4e 49 51 55 45  eated by [UNIQUE
e020: 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b 45  ] or [PRIMARY KE
e030: 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29  Y] constraints.)
e040: 5e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f  ^</p>...<tcl>hd_
e050: 66 72 61 67 6d 65 6e 74 20 69 6e 74 73 63 68 65  fragment intsche
e060: 6d 61 20 7b 69 6e 74 65 72 6e 61 6c 20 73 63 68  ma {internal sch
e070: 65 6d 61 20 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b  ema objects} \.{
e080: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
e090: 6f 62 6a 65 63 74 7d 20 7b 69 6e 74 65 72 6e 61  object} {interna
e0a0: 6c 20 69 6e 64 65 78 7d 20 7b 69 6e 74 65 72 6e  l index} {intern
e0b0: 61 6c 20 69 6e 64 65 78 65 73 7d 20 5c 0a 7b 69  al indexes} \.{i
e0c0: 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 7d 20 7b  nternal table} {
e0d0: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73 7d  internal tables}
e0e0: 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 31  </tcl>.<h4>2.6.1
e0f0: 20 49 6e 74 65 72 6e 61 6c 20 53 63 68 65 6d 61   Internal Schema
e100: 20 4f 62 6a 65 63 74 73 3c 2f 68 34 3e 0a 0a 3c   Objects</h4>..<
e110: 70 3e 5e 49 6e 20 61 64 64 69 74 69 6f 6e 20 74  p>^In addition t
e120: 6f 20 74 68 65 20 74 61 62 6c 65 73 2c 20 69 6e  o the tables, in
e130: 64 65 78 65 73 2c 20 76 69 65 77 73 2c 20 61 6e  dexes, views, an
e140: 64 20 74 72 69 67 67 65 72 73 20 63 72 65 61 74  d triggers creat
e150: 65 64 20 62 79 0a 74 68 65 20 61 70 70 6c 69 63  ed by.the applic
e160: 61 74 69 6f 6e 20 61 6e 64 2f 6f 72 20 74 68 65  ation and/or the
e170: 20 64 65 76 65 6c 6f 70 65 72 20 75 73 69 6e 67   developer using
e180: 20 43 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e   CREATE statemen
e190: 74 73 20 53 51 4c 2c 20 74 68 65 0a 73 71 6c 69  ts SQL, the.sqli
e1a0: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
e1b0: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 7a 65 72 6f  may contain zero
e1c0: 20 6f 72 20 6d 6f 72 65 20 65 6e 74 72 69 65 73   or more entries
e1d0: 20 66 6f 72 20 0a 3c 69 3e 69 6e 74 65 72 6e 61   for .<i>interna
e1e0: 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  l schema objects
e1f0: 3c 2f 69 3e 20 74 68 61 74 20 61 72 65 20 63 72  </i> that are cr
e200: 65 61 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  eated by SQLite 
e210: 66 6f 72 20 69 74 73 20 0a 6f 77 6e 20 69 6e 74  for its .own int
e220: 65 72 6e 61 6c 20 75 73 65 2e 20 20 5e 54 68 65  ernal use.  ^The
e230: 20 6e 61 6d 65 73 20 6f 66 20 69 6e 74 65 72 6e   names of intern
e240: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
e250: 73 0a 61 6c 77 61 79 73 20 62 65 67 69 6e 20 77  s.always begin w
e260: 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61 6e  ith "sqlite_" an
e270: 64 20 61 6e 79 20 74 61 62 6c 65 2c 20 69 6e 64  d any table, ind
e280: 65 78 2c 20 76 69 65 77 2c 20 6f 72 20 74 72 69  ex, view, or tri
e290: 67 67 65 72 0a 77 68 6f 73 65 20 6e 61 6d 65 20  gger.whose name 
e2a0: 62 65 67 69 6e 73 20 77 69 74 68 20 22 73 71 6c  begins with "sql
e2b0: 69 74 65 5f 22 20 69 73 20 61 6e 20 69 6e 74 65  ite_" is an inte
e2c0: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e2d0: 63 74 2e 0a 5e 53 51 4c 69 74 65 20 70 72 6f 68  ct..^SQLite proh
e2e0: 69 62 69 74 73 20 61 70 70 6c 69 63 61 74 69 6f  ibits applicatio
e2f0: 6e 73 20 66 72 6f 6d 20 63 72 65 61 74 69 6e 67  ns from creating
e300: 20 6f 62 6a 65 63 74 73 20 77 68 6f 73 65 20 6e   objects whose n
e310: 61 6d 65 73 20 62 65 67 69 6e 0a 77 69 74 68 20  ames begin.with 
e320: 22 73 71 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c 70  "sqlite_".  ..<p
e330: 3e 49 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61  >Internal schema
e340: 20 6f 62 6a 65 63 74 73 20 75 73 65 64 20 62 79   objects used by
e350: 20 53 51 4c 69 74 65 20 6d 61 79 20 69 6e 63 6c   SQLite may incl
e360: 75 64 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ude the followin
e370: 67 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e  g:..<ul>.<li><p>
e380: 49 6e 64 69 63 65 73 20 77 69 74 68 20 6e 61 6d  Indices with nam
e390: 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  es of the form "
e3a0: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
e3b0: 5f 54 41 42 4c 45 5f 4e 22 20 74 68 61 74 0a 20  _TABLE_N" that. 
e3c0: 20 20 20 20 20 20 61 72 65 20 75 73 65 64 20 74        are used t
e3d0: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e 49  o implement [UNI
e3e0: 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52  QUE] and [PRIMAR
e3f0: 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e  Y KEY] constrain
e400: 74 73 20 6f 6e 0a 20 20 20 20 20 20 20 6f 72 64  ts on.       ord
e410: 69 6e 61 72 79 20 74 61 62 6c 65 73 2e 0a 0a 3c  inary tables...<
e420: 6c 69 3e 3c 70 3e 41 20 74 61 62 6c 65 20 77 69  li><p>A table wi
e430: 74 68 20 74 68 65 20 6e 61 6d 65 20 22 73 71 6c  th the name "sql
e440: 69 74 65 5f 73 65 71 75 65 6e 63 65 22 20 74 68  ite_sequence" th
e450: 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65  at is used to ke
e460: 65 70 20 74 72 61 63 6b 0a 20 20 20 20 20 20 20  ep track.       
e470: 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68  of the maximum h
e480: 69 73 74 6f 72 69 63 61 6c 20 5b 49 4e 54 45 47  istorical [INTEG
e490: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
e4a0: 66 6f 72 20 61 20 74 61 62 6c 65 20 74 68 61 74  for a table that
e4b0: 0a 20 20 20 20 20 20 20 75 73 69 6e 67 20 5b 41  .       using [A
e4c0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a  UTOINCREMENT]...
e4d0: 3c 6c 69 3e 3c 70 3e 54 61 62 6c 65 73 20 77 69  <li><p>Tables wi
e4e0: 74 68 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  th names of the 
e4f0: 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f 73 74 61  form "sqlite_sta
e500: 74 4e 22 20 77 68 65 72 65 20 4e 20 69 73 20 61  tN" where N is a
e510: 6e 20 69 6e 74 65 67 65 72 2e 0a 20 20 20 20 20  n integer..     
e520: 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 73 74    Such tables st
e530: 6f 72 65 20 64 61 74 61 62 61 73 65 20 73 74 61  ore database sta
e540: 74 69 73 74 69 63 73 20 67 61 74 68 65 72 65 64  tistics gathered
e550: 20 62 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45   by the [ANALYZE
e560: 5d 0a 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64  ].       command
e570: 20 61 6e 64 20 75 73 65 64 20 62 79 20 74 68 65   and used by the
e580: 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74   query planner t
e590: 6f 20 68 65 6c 70 20 64 65 74 65 72 6d 69 6e 65  o help determine
e5a0: 20 74 68 65 20 62 65 73 74 0a 20 20 20 20 20 20   the best.      
e5b0: 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73   algorithm to us
e5c0: 65 20 66 6f 72 20 65 61 63 68 20 71 75 65 72 79  e for each query
e5d0: 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 4e 65 77 20  ..</ul>..<p>New 
e5e0: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
e5f0: 6f 62 6a 65 63 74 73 20 6e 61 6d 65 73 2c 20 61  objects names, a
e600: 6c 77 61 79 73 20 62 65 67 69 6e 6e 69 6e 67 20  lways beginning 
e610: 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 2c 0a  with "sqlite_",.
e620: 6d 61 79 20 62 65 20 61 64 64 65 64 20 74 6f 20  may be added to 
e630: 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65 20  the SQLite file 
e640: 66 6f 72 6d 61 74 20 69 6e 20 66 75 74 75 72 65  format in future
e650: 20 72 65 6c 65 61 73 65 73 2e 0a 0a 3c 74 63 6c   releases...<tcl
e660: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 71  >hd_fragment seq
e670: 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 65 71 75  tab {sqlite_sequ
e680: 65 6e 63 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  ence}</tcl>.<h4>
e690: 32 2e 36 2e 32 20 54 68 65 20 73 71 6c 69 74 65  2.6.2 The sqlite
e6a0: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 3c  _sequence table<
e6b0: 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71  /h4>..<p>^The sq
e6c0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
e6d0: 62 6c 65 20 69 73 20 61 6e 20 69 6e 74 65 72 6e  ble is an intern
e6e0: 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
e6f0: 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 0a   help implement.
e700: 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e  [AUTOINCREMENT].
e710: 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65    ^The sqlite_se
e720: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20  quence table is 
e730: 63 72 65 61 74 65 64 20 61 75 74 6f 6d 61 74 69  created automati
e740: 63 61 6c 6c 79 0a 77 68 65 6e 65 76 65 72 20 61  cally.whenever a
e750: 6e 79 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  ny ordinary tabl
e760: 65 20 77 69 74 68 20 61 6e 20 41 55 54 4f 49 4e  e with an AUTOIN
e770: 43 52 45 4d 45 4e 54 20 69 6e 74 65 67 65 72 20  CREMENT integer 
e780: 70 72 69 6d 61 72 79 0a 6b 65 79 20 69 73 20 63  primary.key is c
e790: 72 65 61 74 65 64 2e 20 20 5e 4f 6e 63 65 20 63  reated.  ^Once c
e7a0: 72 65 61 74 65 64 2c 20 74 68 65 20 73 71 6c 69  reated, the sqli
e7b0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
e7c0: 65 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a  e exists in the.
e7d0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
e7e0: 62 6c 65 20 66 6f 72 65 76 65 72 3b 20 69 74 20  ble forever; it 
e7f0: 63 61 6e 6e 6f 74 20 62 65 20 64 72 6f 70 70 65  cannot be droppe
e800: 64 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20  d..^(The schema 
e810: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73  for the sqlite_s
e820: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69 73  equence table is
e830: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
e840: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
e850: 45 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  E sqlite_sequenc
e860: 65 28 6e 61 6d 65 2c 73 65 71 29 3b 0a 3c 2f 70  e(name,seq);.</p
e870: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
e880: 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 69 73  )^..<p>^There is
e890: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e   a single row in
e8a0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
e8b0: 65 6e 63 65 20 74 61 62 6c 65 20 66 6f 72 20 65  ence table for e
e8c0: 61 63 68 20 6f 72 64 69 6e 61 72 79 0a 74 61 62  ach ordinary.tab
e8d0: 6c 65 20 74 68 61 74 20 75 73 65 73 20 41 55 54  le that uses AUT
e8e0: 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 5e 28 54  OINCREMENT.  ^(T
e8f0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
e900: 61 62 6c 65 20 28 61 73 20 69 74 20 61 70 70 65  able (as it appe
e910: 61 72 73 20 69 6e 0a 73 71 6c 69 74 65 5f 6d 61  ars in.sqlite_ma
e920: 73 74 65 72 2e 6e 61 6d 65 29 20 69 73 20 69 6e  ster.name) is in
e930: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
e940: 65 6e 63 65 2e 6d 61 69 6e 20 66 69 65 6c 64 20  ence.main field 
e950: 61 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 0a  and the largest.
e960: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
e970: 20 4b 45 59 5d 20 65 76 65 72 20 75 73 65 64 20   KEY] ever used 
e980: 62 79 20 74 68 61 74 20 74 61 62 6c 65 20 69 73  by that table is
e990: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
e9a0: 65 71 75 65 6e 63 65 2e 73 65 71 0a 66 69 65 6c  equence.seq.fiel
e9b0: 64 2e 29 5e 20 20 5e 4e 65 77 20 61 75 74 6f 6d  d.)^  ^New autom
e9c0: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
e9d0: 65 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  ed integer prima
e9e0: 72 79 20 6b 65 79 73 20 66 6f 72 20 41 55 54 4f  ry keys for AUTO
e9f0: 49 4e 43 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73  INCREMENT.tables
ea00: 20 61 72 65 20 67 75 61 72 61 6e 74 65 65 64 20   are guaranteed 
ea10: 74 6f 20 62 65 20 6c 61 72 67 65 72 20 74 68 61  to be larger tha
ea20: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  n the sqlite_seq
ea30: 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20  uence.seq field 
ea40: 66 6f 72 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a  for.that table..
ea50: 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  ^(If the sqlite_
ea60: 73 65 71 75 65 6e 63 65 2e 73 65 71 20 66 69 65  sequence.seq fie
ea70: 6c 64 20 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43  ld of an AUTOINC
ea80: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20  REMENT table is 
ea90: 61 6c 72 65 61 64 79 20 61 74 0a 74 68 65 20 6c  already at.the l
eaa0: 61 72 67 65 73 74 20 69 6e 74 65 67 65 72 20 76  argest integer v
eab0: 61 6c 75 65 20 28 39 32 32 33 33 37 32 30 33 36  alue (9223372036
eac0: 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
ead0: 61 74 74 65 6d 70 74 73 20 74 6f 20 61 64 64 20  attempts to add 
eae0: 6e 65 77 0a 72 6f 77 73 20 74 6f 20 74 68 61 74  new.rows to that
eaf0: 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 61   table with an a
eb00: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e  utomatically gen
eb10: 65 72 61 74 65 64 20 69 6e 74 65 67 65 72 20 70  erated integer p
eb20: 72 69 6d 61 72 79 20 77 69 6c 6c 20 66 61 69 6c  rimary will fail
eb30: 0a 77 69 74 68 20 61 6e 20 5b 53 51 4c 49 54 45  .with an [SQLITE
eb40: 5f 46 55 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a  _FULL] error.)^.
eb50: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
eb60: 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 69  ence.seq field i
eb70: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
eb80: 75 70 64 61 74 65 64 20 69 66 20 72 65 71 75 69  updated if requi
eb90: 72 65 64 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74  red when.new ent
eba0: 72 69 65 73 20 61 72 65 20 61 64 64 65 64 20 74  ries are added t
ebb0: 6f 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  o an AUTOINCREME
ebc0: 4e 54 20 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65  NT table.  .^The
ebd0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ebe0: 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55 54 4f   row for an AUTO
ebf0: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20  INCREMENT table 
ec00: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
ec10: 20 64 65 6c 65 74 65 64 0a 77 68 65 6e 20 74 68   deleted.when th
ec20: 65 20 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70  e table is dropp
ec30: 65 64 2e 0a 5e 49 66 20 74 68 65 20 73 71 6c 69  ed..^If the sqli
ec40: 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20  te_sequence row 
ec50: 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45  for an AUTOINCRE
ec60: 4d 45 4e 54 20 74 61 62 6c 65 20 64 6f 65 73 20  MENT table does 
ec70: 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 74  not exist when.t
ec80: 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  he AUTOINCREMENT
ec90: 20 74 61 62 6c 65 20 69 73 20 75 70 64 61 74 65   table is update
eca0: 64 2c 20 74 68 65 6e 20 61 20 6e 65 77 20 73 71  d, then a new sq
ecb0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
ecc0: 77 20 69 73 20 63 72 65 61 74 65 64 2e 0a 5e 28  w is created..^(
ecd0: 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  If the sqlite_se
ece0: 71 75 65 6e 63 65 2e 73 65 71 20 76 61 6c 75 65  quence.seq value
ecf0: 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52   for an AUTOINCR
ed00: 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 6d  EMENT table is m
ed10: 61 6e 75 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20  anually .set to 
ed20: 73 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65 72 20  something other 
ed30: 74 68 61 6e 20 61 6e 20 69 6e 74 65 67 65 72 20  than an integer 
ed40: 61 6e 64 20 74 68 65 72 65 20 69 73 20 61 20 73  and there is a s
ed50: 75 62 73 65 71 75 65 6e 74 20 61 74 74 65 6d 70  ubsequent attemp
ed60: 74 20 74 6f 0a 69 6e 73 65 72 74 20 74 68 65 20  t to.insert the 
ed70: 6f 72 20 75 70 64 61 74 65 20 74 68 65 20 41 55  or update the AU
ed80: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
ed90: 65 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  e, then the beha
eda0: 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65  vior is undefine
edb0: 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63  d.)^..<p>^Applic
edc0: 61 74 69 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c  ation code is al
edd0: 6c 6f 77 65 64 20 74 6f 20 6d 6f 64 69 66 79 20  lowed to modify 
ede0: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
edf0: 6e 63 65 20 74 61 62 6c 65 2c 20 74 6f 20 61 64  nce table, to ad
ee00: 64 0a 6e 65 77 20 72 6f 77 73 2c 20 74 6f 20 64  d.new rows, to d
ee10: 65 6c 65 74 65 20 72 6f 77 73 2c 20 6f 72 20 74  elete rows, or t
ee20: 6f 20 6d 6f 64 69 66 79 20 65 78 69 73 74 69 6e  o modify existin
ee30: 67 20 72 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65  g rows.  ^Howeve
ee40: 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63  r, application.c
ee50: 6f 64 65 20 63 61 6e 6e 6f 74 20 63 72 65 61 74  ode cannot creat
ee60: 65 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  e the sqlite_seq
ee70: 75 65 6e 63 65 20 74 61 62 6c 65 20 69 66 20 69  uence table if i
ee80: 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61  t does not alrea
ee90: 64 79 20 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69  dy exist..^Appli
eea0: 63 61 74 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20  cation code can 
eeb0: 64 65 6c 65 74 65 20 61 6c 6c 20 65 6e 74 72 69  delete all entri
eec0: 65 73 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69  es from the sqli
eed0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
eee0: 65 2c 0a 62 75 74 20 61 70 70 6c 69 63 61 74 69  e,.but applicati
eef0: 6f 6e 20 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64  on code cannot d
ef00: 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65 5f 73  rop the sqlite_s
ef10: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a  equence table...
ef20: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
ef30: 20 73 74 61 74 31 74 61 62 20 7b 73 71 6c 69 74   stat1tab {sqlit
ef40: 65 5f 73 74 61 74 31 7d 20 53 51 4c 49 54 45 5f  e_stat1} SQLITE_
ef50: 53 54 41 54 31 20 3c 2f 74 63 6c 3e 0a 3c 68 34  STAT1 </tcl>.<h4
ef60: 3e 32 2e 36 2e 33 20 54 68 65 20 73 71 6c 69 74  >2.6.3 The sqlit
ef70: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 3c 2f 68  e_stat1 table</h
ef80: 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69  4>..<p>^The sqli
ef90: 74 65 5f 73 74 61 74 31 20 69 73 20 61 6e 20 69  te_stat1 is an i
efa0: 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 63 72  nternal table cr
efb0: 65 61 74 65 64 20 62 79 20 74 68 65 20 5b 41 4e  eated by the [AN
efc0: 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61  ALYZE] command.a
efd0: 6e 64 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  nd used to hold 
efe0: 73 75 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66  supplemental inf
eff0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
f000: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65  ables and indexe
f010: 73 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79  s that the.query
f020: 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65   planner can use
f030: 20 74 6f 20 68 65 6c 70 20 69 74 20 66 69 6e 64   to help it find
f040: 20 62 65 74 74 65 72 20 77 61 79 73 20 6f 66 20   better ways of 
f050: 70 65 72 66 6f 72 6d 69 6e 67 20 71 75 65 72 69  performing queri
f060: 65 73 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e  es..^Application
f070: 73 20 63 61 6e 20 75 70 64 61 74 65 2c 20 64 65  s can update, de
f080: 6c 65 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72  lete from, inser
f090: 74 20 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74  t into or drop t
f0a0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 0a  he sqlite_stat1.
f0b0: 74 61 62 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e  table, but may n
f0c0: 6f 74 20 63 72 65 61 74 65 20 6f 72 20 61 6c 74  ot create or alt
f0d0: 65 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  er the sqlite_st
f0e0: 61 74 31 20 74 61 62 6c 65 2e 0a 5e 28 54 68 65  at1 table..^(The
f0f0: 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73   schema of the s
f100: 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
f110: 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  e is as follows:
f120: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
f130: 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
f140: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 28 74 62   sqlite_stat1(tb
f150: 6c 2c 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f 70  l,idx,stat);.</p
f160: 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  re></blockquote>
f170: 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 72 65 20  )^..<p> ^(There 
f180: 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 65 20  is normally one 
f190: 72 6f 77 20 70 65 72 20 69 6e 64 65 78 2c 20 77  row per index, w
f1a0: 69 74 68 20 74 68 65 20 69 6e 64 65 78 20 69 64  ith the index id
f1b0: 65 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 0a  entified by the.
f1c0: 6e 61 6d 65 20 69 6e 20 74 68 65 20 73 71 6c 69  name in the sqli
f1d0: 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f 6c  te_stat1.idx col
f1e0: 75 6d 6e 2e 29 5e 20 20 5e 28 54 68 65 20 73 71  umn.)^  ^(The sq
f1f0: 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 20 63  lite_stat1.tbl c
f200: 6f 6c 75 6d 6e 20 69 73 0a 74 68 65 20 6e 61 6d  olumn is.the nam
f210: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
f220: 6f 20 77 68 69 63 68 20 74 68 65 20 69 6e 64 65  o which the inde
f230: 78 20 62 65 6c 6f 6e 67 73 2e 29 5e 20 20 5e 28  x belongs.)^  ^(
f240: 49 6e 20 65 61 63 68 20 73 75 63 68 20 72 6f 77  In each such row
f250: 2c 20 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74  , .the sqlite_st
f260: 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e 20 77  at.stat column w
f270: 69 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e 67 20  ill be.a string 
f280: 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 61 20  consisting of a 
f290: 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73  list of integers
f2a0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72   followed by zer
f2b0: 6f 20 6f 72 20 6d 6f 72 65 20 0a 61 72 67 75 6d  o or more .argum
f2c0: 65 6e 74 73 2e 29 5e 20 20 5e 54 68 65 20 66 69  ents.)^  ^The fi
f2d0: 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74  rst integer in t
f2e0: 68 69 73 0a 6c 69 73 74 20 69 73 20 74 68 65 20  his.list is the 
f2f0: 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62  approximate numb
f300: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
f310: 65 20 69 6e 64 65 78 20 61 6e 64 20 69 6e 20 74  e index and in t
f320: 68 65 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73  he table..^The s
f330: 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 69 73  econd integer is
f340: 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
f350: 20 61 76 65 72 61 67 65 20 6e 75 6d 62 65 72 20   average number 
f360: 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
f370: 6e 64 65 78 0a 74 68 61 74 20 68 61 76 65 20 74  ndex.that have t
f380: 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 69 6e  he same value in
f390: 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
f3a0: 6e 20 6f 66 20 74 68 65 20 69 6e 64 65 78 2e 20  n of the index. 
f3b0: 20 5e 54 68 65 20 74 68 69 72 64 20 0a 69 6e 74   ^The third .int
f3c0: 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70 72  eger is the appr
f3d0: 6f 78 69 6d 61 74 65 20 61 76 65 72 61 67 65 20  oximate average 
f3e0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
f3f0: 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  n the index that
f400: 20 68 61 76 65 20 0a 74 68 65 20 73 61 6d 65 20   have .the same 
f410: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69  value for the fi
f420: 72 73 74 20 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e  rst two columns.
f430: 20 20 5e 54 68 65 20 4e 2d 74 68 20 69 6e 74 65    ^The N-th inte
f440: 67 65 72 20 28 66 6f 72 20 4e 3e 31 29 20 0a 69  ger (for N>1) .i
f450: 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
f460: 65 20 61 76 65 72 61 67 65 20 6e 75 6d 62 65 72  e average number
f470: 20 6f 66 20 72 6f 77 73 20 69 6e 20 0a 74 68 65   of rows in .the
f480: 20 69 6e 64 65 78 20 77 68 69 63 68 20 68 61 76   index which hav
f490: 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
f4a0: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 4e   for the first N
f4b0: 2d 31 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 46 6f  -1 columns.  ^Fo
f4c0: 72 0a 61 20 4b 2d 63 6f 6c 75 6d 6e 20 69 6e 64  r.a K-column ind
f4d0: 65 78 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 62  ex, there will b
f4e0: 65 20 4b 2b 31 20 69 6e 74 65 67 65 72 73 20 69  e K+1 integers i
f4f0: 6e 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d  n the stat colum
f500: 6e 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e 64 65  n.  ^If.the inde
f510: 78 20 69 73 20 75 6e 69 71 75 65 2c 20 74 68 65  x is unique, the
f520: 6e 20 74 68 65 20 6c 61 73 74 20 69 6e 74 65 67  n the last integ
f530: 65 72 20 77 69 6c 6c 20 62 65 20 31 2e 0a 0a 3c  er will be 1...<
f540: 70 3e 5e 54 68 65 20 6c 69 73 74 20 6f 66 20 69  p>^The list of i
f550: 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65 20 73  ntegers in the s
f560: 74 61 74 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 6f  tat column can o
f570: 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 66 6f 6c  ptionally be fol
f580: 6c 6f 77 65 64 0a 62 79 20 61 72 67 75 6d 65 6e  lowed.by argumen
f590: 74 73 2c 20 65 61 63 68 20 6f 66 20 77 68 69 63  ts, each of whic
f5a0: 68 20 69 73 20 61 20 73 65 71 75 65 6e 63 65 20  h is a sequence 
f5b0: 6f 66 20 6e 6f 6e 2d 73 70 61 63 65 20 63 68 61  of non-space cha
f5c0: 72 61 63 74 65 72 73 2e 0a 5e 41 6c 6c 20 61 72  racters..^All ar
f5d0: 67 75 6d 65 6e 74 73 20 61 72 65 20 70 72 65 63  guments are prec
f5e0: 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  eded by a single
f5f0: 20 73 70 61 63 65 2e 0a 5e 55 6e 72 65 63 6f 67   space..^Unrecog
f600: 6e 69 7a 65 64 20 61 72 67 75 6d 65 6e 74 73 20  nized arguments 
f610: 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e  are silently ign
f620: 6f 72 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ored...<p>^If th
f630: 65 20 22 75 6e 6f 72 64 65 72 65 64 22 20 61 72  e "unordered" ar
f640: 67 75 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e  gument is presen
f650: 74 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65 72  t, then the quer
f660: 79 20 70 6c 61 6e 6e 65 72 20 61 73 73 75 6d 65  y planner assume
f670: 73 0a 74 68 61 74 20 74 68 65 20 69 6e 64 65 78  s.that the index
f680: 20 69 73 20 75 6e 6f 72 64 65 72 65 64 20 61 6e   is unordered an
f690: 64 20 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74  d will not use t
f6a0: 68 65 20 69 6e 64 65 78 20 66 6f 72 20 61 20 72  he index for a r
f6b0: 61 6e 67 65 20 71 75 65 72 79 0a 6f 72 20 66 6f  ange query.or fo
f6c0: 72 20 73 6f 72 74 69 6e 67 2e 0a 0a 3c 70 3e 5e  r sorting...<p>^
f6d0: 54 68 65 20 22 73 7a 3d 4e 4e 4e 22 20 61 72 67  The "sz=NNN" arg
f6e0: 75 6d 65 6e 74 20 28 77 68 65 72 65 20 4e 4e 4e  ument (where NNN
f6f0: 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
f700: 71 75 65 6e 63 65 20 6f 66 20 31 20 6f 72 20 6d  quence of 1 or m
f710: 6f 72 65 20 64 69 67 69 74 73 29 0a 6d 65 61 6e  ore digits).mean
f720: 73 20 74 68 61 74 20 74 68 65 20 61 76 65 72 61  s that the avera
f730: 67 65 20 72 6f 77 20 73 69 7a 65 20 6f 76 65 72  ge row size over
f740: 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 6f 66 20   all records of 
f750: 74 68 65 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64  the table or.ind
f760: 65 78 20 69 73 20 4e 4e 4e 20 62 79 74 65 73 20  ex is NNN bytes 
f770: 70 65 72 20 72 6f 77 2e 20 20 5e 54 68 65 20 53  per row.  ^The S
f780: 51 4c 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e  QLite query plan
f790: 6e 65 72 20 6d 69 67 68 74 20 75 73 65 20 74 68  ner might use th
f7a0: 65 0a 65 73 74 69 6d 61 74 65 64 20 72 6f 77 20  e.estimated row 
f7b0: 73 69 7a 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  size information
f7c0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
f7d0: 20 22 73 7a 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 0a   "sz=NNN" token.
f7e0: 74 6f 20 68 65 6c 70 20 69 74 20 63 68 6f 6f 73  to help it choos
f7f0: 65 20 73 6d 61 6c 6c 65 72 20 74 61 62 6c 65 73  e smaller tables
f800: 20 61 6e 64 20 69 6e 64 65 78 65 73 20 74 68 61   and indexes tha
f810: 74 20 72 65 71 75 69 72 65 20 6c 65 73 73 20 64  t require less d
f820: 69 73 6b 20 49 2f 4f 2e 0a 0a 3c 70 3e 5e 28 54  isk I/O...<p>^(T
f830: 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74  he presence of t
f840: 68 65 20 22 6e 6f 73 6b 69 70 73 63 61 6e 22 20  he "noskipscan" 
f850: 74 6f 6b 65 6e 20 6f 6e 20 74 68 65 20 73 71 6c  token on the sql
f860: 69 74 65 5f 73 74 61 74 31 2e 73 74 61 74 20 66  ite_stat1.stat f
f870: 69 65 6c 64 0a 6f 66 20 61 6e 20 69 6e 64 65 78  ield.of an index
f880: 20 70 72 65 76 65 6e 74 73 20 74 68 61 74 20 69   prevents that i
f890: 6e 64 65 78 20 66 72 6f 6d 20 62 65 69 6e 67 20  ndex from being 
f8a0: 75 73 65 64 20 77 69 74 68 20 74 68 65 0a 5b 73  used with the.[s
f8b0: 6b 69 70 2d 73 63 61 6e 20 6f 70 74 69 6d 69 7a  kip-scan optimiz
f8c0: 61 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e 4e 65  ation].)^..<p>Ne
f8d0: 77 20 74 65 78 74 20 74 6f 6b 65 6e 73 20 6d 61  w text tokens ma
f8e0: 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  y be added to th
f8f0: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61  e end of the sta
f900: 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 66 75 74 75  t column in futu
f910: 72 65 0a 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20  re.enhancements 
f920: 74 6f 20 53 51 4c 69 74 65 2e 20 20 46 6f 72 20  to SQLite.  For 
f930: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 75  compatibility, u
f940: 6e 72 65 63 6f 67 6e 69 7a 65 64 20 74 6f 6b 65  nrecognized toke
f950: 6e 73 20 61 74 20 74 68 65 20 65 6e 64 0a 6f 66  ns at the end.of
f960: 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e   the stat column
f970: 20 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67   are silently ig
f980: 6e 6f 72 65 64 2e 0a 0a 3c 70 3e 5e 28 49 66 20  nored...<p>^(If 
f990: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
f9a0: 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 69 73 20 4e  .idx column is N
f9b0: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 73 71  ULL, then the sq
f9c0: 6c 69 74 65 5f 73 74 61 74 31 2e 73 74 61 74 0a  lite_stat1.stat.
f9d0: 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
f9e0: 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  a single integer
f9f0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 61 70   which is the ap
fa00: 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
fa10: 20 6f 66 0a 72 6f 77 73 20 69 6e 20 74 68 65 20   of.rows in the 
fa20: 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64  table identified
fa30: 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74 31   by sqlite_stat1
fa40: 2e 74 62 6c 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  .tbl.)^..<tcl>hd
fa50: 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 32 74  _fragment stat2t
fa60: 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 32  ab {sqlite_stat2
fa70: 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e  }</tcl>.<h4>2.6.
fa80: 34 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  4 The sqlite_sta
fa90: 74 32 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c  t2 table</h4>..<
faa0: 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  p>The sqlite_sta
fab0: 74 32 20 69 73 20 6f 6e 6c 79 20 63 72 65 61 74  t2 is only creat
fac0: 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20 75  ed and is only u
fad0: 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  sed if SQLite is
fae0: 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 53   compiled.with S
faf0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
fb00: 54 32 20 61 6e 64 20 69 66 20 74 68 65 20 53 51  T2 and if the SQ
fb10: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d  Lite version num
fb20: 62 65 72 20 69 73 20 62 65 74 77 65 65 6e 0a 33  ber is between.3
fb30: 2e 36 2e 31 38 20 61 6e 64 20 33 2e 37 2e 38 2e  .6.18 and 3.7.8.
fb40: 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61    The sqlite_sta
fb50: 74 32 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74  t2 table is neit
fb60: 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69  her read nor wri
fb70: 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73  tten by any.vers
fb80: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65  ion of SQLite be
fb90: 66 6f 72 65 20 33 2e 36 2e 31 38 20 6e 6f 72 20  fore 3.6.18 nor 
fba0: 61 66 74 65 72 20 33 2e 37 2e 38 2e 0a 54 68 65  after 3.7.8..The
fbb0: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
fbc0: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64  ble contains add
fbd0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
fbe0: 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69  ion.about the di
fbf0: 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65  stribution of ke
fc00: 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64  ys within an ind
fc10: 65 78 2e 0a 54 68 65 20 73 63 68 65 6d 61 20 6f  ex..The schema o
fc20: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
fc30: 74 32 20 74 61 62 6c 65 20 69 73 20 61 73 20 66  t2 table is as f
fc40: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
fc50: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
fc60: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
fc70: 74 61 74 32 28 74 62 6c 2c 69 64 78 2c 73 61 6d  tat2(tbl,idx,sam
fc80: 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65 29 3b 0a 3c  pleno,sample);.<
fc90: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
fca0: 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  e>..<p>The sqlit
fcb0: 65 5f 73 74 61 74 32 2e 69 64 78 20 63 6f 6c 75  e_stat2.idx colu
fcc0: 6d 6e 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  mn and the sqlit
fcd0: 65 5f 73 74 61 74 32 2e 74 62 6c 20 63 6f 6c 75  e_stat2.tbl colu
fce0: 6d 6e 20 69 6e 20 65 61 63 68 20 0a 72 6f 77 20  mn in each .row 
fcf0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
fd00: 61 74 32 20 74 61 62 6c 65 20 69 64 65 6e 74 69  at2 table identi
fd10: 66 79 20 61 6e 20 69 6e 64 65 78 20 64 65 73 63  fy an index desc
fd20: 72 69 62 65 64 20 62 79 20 74 68 61 74 20 72 6f  ribed by that ro
fd30: 77 2e 0a 54 68 65 72 65 20 61 72 65 20 75 73 75  w..There are usu
fd40: 61 6c 6c 79 20 31 30 20 72 6f 77 73 20 69 6e 20  ally 10 rows in 
fd50: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  the sqlite_stat2
fd60: 0a 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20  .table for each 
fd70: 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68 65 20 73  index...<p>The s
fd80: 71 6c 69 74 65 5f 73 74 61 74 32 20 65 6e 74 72  qlite_stat2 entr
fd90: 69 65 73 20 66 6f 72 20 61 6e 20 69 6e 64 65 78  ies for an index
fda0: 20 74 68 61 74 20 68 61 76 65 20 73 71 6c 69 74   that have sqlit
fdb0: 65 5f 73 74 61 74 32 2e 73 61 6d 70 6c 65 6e 6f  e_stat2.sampleno
fdc0: 0a 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 39  .between 0 and 9
fdd0: 20 69 6e 63 6c 75 73 69 76 65 20 61 72 65 20 73   inclusive are s
fde0: 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
fdf0: 66 74 2d 6d 6f 73 74 20 6b 65 79 20 76 61 6c 75  ft-most key valu
fe00: 65 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20 74  e in the.index t
fe10: 61 6b 65 6e 20 61 74 20 65 76 65 6e 6c 79 20 73  aken at evenly s
fe20: 70 61 63 65 64 20 70 6f 69 6e 74 73 20 61 6c 6f  paced points alo
fe30: 6e 67 20 74 68 65 20 69 6e 64 65 78 2e 0a 4c 65  ng the index..Le
fe40: 74 20 43 20 62 65 20 74 68 65 20 6e 75 6d 62 65  t C be the numbe
fe50: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
fe60: 20 69 6e 64 65 78 2e 0a 54 68 65 6e 20 74 68 65   index..Then the
fe70: 20 73 61 6d 70 6c 65 64 20 72 6f 77 73 20 61 72   sampled rows ar
fe80: 65 20 67 69 76 65 6e 20 62 79 0a 0a 3c 62 6c 6f  e given by..<blo
fe90: 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 20 72 6f  ckquote>.     ro
fea0: 77 6e 75 6d 62 65 72 20 3d 20 28 69 2a 43 2a 32  wnumber = (i*C*2
feb0: 20 2b 20 43 29 2f 32 30 0a 3c 2f 62 6c 6f 63 6b   + C)/20.</block
fec0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 76  quote>..<p>The v
fed0: 61 72 69 61 62 6c 65 20 69 20 69 6e 20 74 68 65  ariable i in the
fee0: 20 70 72 65 76 69 6f 75 73 20 65 78 70 72 65 73   previous expres
fef0: 73 69 6f 6e 20 76 61 72 69 65 73 20 62 65 74 77  sion varies betw
ff00: 65 65 6e 20 30 20 61 6e 64 20 39 2e 0a 43 6f 6e  een 0 and 9..Con
ff10: 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65 20 69  ceptually, the i
ff20: 6e 64 65 78 20 73 70 61 63 65 20 69 73 20 64 69  ndex space is di
ff30: 76 69 64 65 64 20 69 6e 74 6f 0a 31 30 20 75 6e  vided into.10 un
ff40: 69 66 6f 72 6d 20 62 75 63 6b 65 74 73 20 61 6e  iform buckets an
ff50: 64 20 74 68 65 20 73 61 6d 70 6c 65 73 20 61 72  d the samples ar
ff60: 65 20 74 68 65 20 6d 69 64 64 6c 65 20 72 6f 77  e the middle row
ff70: 20 66 72 6f 6d 20 65 61 63 68 20 62 75 63 6b 65   from each bucke
ff80: 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61  t...<p>The forma
ff90: 74 20 66 6f 72 20 73 71 6c 69 74 65 5f 73 74 61  t for sqlite_sta
ffa0: 74 32 20 69 73 20 72 65 63 6f 72 64 65 64 20 68  t2 is recorded h
ffb0: 65 72 65 20 66 6f 72 20 6c 65 67 61 63 79 20 72  ere for legacy r
ffc0: 65 66 65 72 65 6e 63 65 2e 20 20 0a 52 65 63 65  eference.  .Rece
ffd0: 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  nt versions of S
ffe0: 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67 65 72 20  QLite no longer 
fff0: 73 75 70 70 6f 72 74 20 73 71 6c 69 74 65 5f 73  support sqlite_s
10000 74 61 74 32 20 61 6e 64 20 74 68 65 0a 73 71 6c  tat2 and the.sql
10010 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 2c  ite_stat2 table,
10020 20 69 74 20 69 73 20 65 78 69 73 74 73 2c 20 69   it is exists, i
10030 73 20 73 69 6d 70 6c 79 20 69 67 6e 6f 72 65 64  s simply ignored
10040 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
10050 65 6e 74 20 73 74 61 74 33 74 61 62 20 7b 73 71  ent stat3tab {sq
10060 6c 69 74 65 5f 73 74 61 74 33 7d 20 53 51 4c 49  lite_stat3} SQLI
10070 54 45 5f 53 54 41 54 33 3c 2f 74 63 6c 3e 0a 3c  TE_STAT3</tcl>.<
10080 68 34 3e 32 2e 36 2e 35 20 54 68 65 20 73 71 6c  h4>2.6.5 The sql
10090 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 3c  ite_stat3 table<
100a0 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  /h4>..<p>The sql
100b0 69 74 65 5f 73 74 61 74 33 20 69 73 20 6f 6e 6c  ite_stat3 is onl
100c0 79 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65  y used if SQLite
100d0 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74   is compiled.wit
100e0 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  h [SQLITE_ENABLE
100f0 5f 53 54 41 54 33 5d 20 6f 72 20 5b 53 51 4c 49  _STAT3] or [SQLI
10100 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d  TE_ENABLE_STAT4]
10110 0a 61 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69  .and if the SQLi
10120 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  te version numbe
10130 72 20 69 73 20 33 2e 37 2e 39 20 6f 72 20 67 72  r is 3.7.9 or gr
10140 65 61 74 65 72 2e 0a 54 68 65 20 73 71 6c 69 74  eater..The sqlit
10150 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
10160 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f   neither read no
10170 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79  r written by any
10180 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69  .version of SQLi
10190 74 65 20 62 65 66 6f 72 65 20 33 2e 37 2e 39 2e  te before 3.7.9.
101a0 0a 49 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  .If the [SQLITE_
101b0 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 63 6f  ENABLE_STAT4] co
101c0 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
101d0 6e 20 69 73 20 75 73 65 64 20 61 6e 64 20 74 68  n is used and th
101e0 65 0a 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  e.SQLite version
101f0 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 38 2e 31   number is 3.8.1
10200 20 6f 72 20 67 72 65 61 74 65 72 2c 20 74 68 65   or greater, the
10210 6e 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 6d  n sqlite_stat3 m
10220 69 67 68 74 0a 62 65 20 72 65 61 64 20 62 75 74  ight.be read but
10230 20 6e 6f 74 20 77 72 69 74 74 65 6e 2e 0a 54 68   not written..Th
10240 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
10250 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64  able contains ad
10260 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
10270 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64  tion.about the d
10280 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b  istribution of k
10290 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e  eys within an in
102a0 64 65 78 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  dex, information
102b0 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79 20   that the.query 
102c0 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20  planner can use 
102d0 74 6f 20 64 65 76 69 73 65 20 62 65 74 74 65 72  to devise better
102e0 20 61 6e 64 20 66 61 73 74 65 72 20 71 75 65 72   and faster quer
102f0 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28  y algorithms..^(
10300 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  The schema of th
10310 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
10320 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f  able is as follo
10330 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ws:..<blockquote
10340 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
10350 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 33  BLE sqlite_stat3
10360 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74  (tbl,idx,nEq,nLt
10370 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c  ,nDLt,sample);.<
10380 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
10390 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61  e>)^..<p>There a
103a0 72 65 20 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69  re usually multi
103b0 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ple entries in t
103c0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
103d0 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20 69  table for each i
103e0 6e 64 65 78 2e 0a 5e 28 54 68 65 20 73 71 6c 69  ndex..^(The sqli
103f0 74 65 5f 73 74 61 74 33 2e 73 61 6d 70 6c 65 20  te_stat3.sample 
10400 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65  column holds the
10410 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 65   value of the le
10420 66 74 2d 6d 6f 73 74 20 66 69 65 6c 64 20 6f 66  ft-most field of
10430 20 61 6e 0a 69 6e 64 65 78 20 69 64 65 6e 74 69   an.index identi
10440 66 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73  fied by sqlite_s
10450 74 61 74 33 2e 69 64 78 20 61 6e 64 20 73 71 6c  tat3.idx and sql
10460 69 74 65 5f 73 74 61 74 33 2e 74 62 6c 2e 29 5e  ite_stat3.tbl.)^
10470 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .^(The sqlite_st
10480 61 74 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68  at3.nEq column h
10490 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69  olds the approxi
104a0 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65  mate.number of e
104b0 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
104c0 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d  dex whose left-m
104d0 6f 73 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74  ost column exact
104e0 6c 79 20 6d 61 74 63 68 65 73 0a 74 68 65 20 73  ly matches.the s
104f0 61 6d 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73  ample.)^.^(The s
10500 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20  qlite_stat3.nLt 
10510 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78  holds the approx
10520 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
10530 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 69  entries in the.i
10540 6e 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d  ndex whose left-
10550 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c  most column is l
10560 65 73 73 20 74 68 61 6e 20 74 68 65 20 73 61 6d  ess than the sam
10570 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c  ple.)^.^(The sql
10580 69 74 65 5f 73 74 61 74 33 2e 6e 44 4c 74 20 63  ite_stat3.nDLt c
10590 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20  olumn holds the 
105a0 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62  approximate.numb
105b0 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6c  er of distinct l
105c0 65 66 74 2d 6d 6f 73 74 20 65 6e 74 72 69 65 73  eft-most entries
105d0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68   in the index th
105e0 61 74 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  at are less than
105f0 0a 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a  .the sample.)^..
10600 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e 20 62 65  <p>^There can be
10610 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75   an arbitrary nu
10620 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73  mber of sqlite_s
10630 74 61 74 33 20 65 6e 74 72 69 65 73 20 70 65 72  tat3 entries per
10640 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41   index..The [ANA
10650 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69  LYZE] command wi
10660 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e  ll typically gen
10670 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61  erate sqlite_sta
10680 74 33 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63  t3 tables.that c
10690 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31  ontain between 1
106a0 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73  0 and 40 samples
106b0 20 74 68 61 74 20 61 72 65 20 64 69 73 74 72 69   that are distri
106c0 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65  buted across.the
106d0 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64 20 77   key space and w
106e0 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61  ith large nEq va
106f0 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61  lues...<p>^(In a
10700 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c   well-formed sql
10710 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2c  ite_stat3 table,
10720 20 74 68 65 20 73 61 6d 70 6c 65 73 20 66 6f 72   the samples for
10730 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65   any single.inde
10740 78 20 6d 75 73 74 20 61 70 70 65 61 72 20 69 6e  x must appear in
10750 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20   the same order 
10760 74 68 61 74 20 74 68 65 79 20 6f 63 63 75 72 20  that they occur 
10770 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 20 0a  in the index.  .
10780 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
10790 69 66 20 74 68 65 20 65 6e 74 72 79 20 77 69 74  if the entry wit
107a0 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  h left-most colu
107b0 6d 6e 20 53 31 20 69 73 20 65 61 72 6c 69 65 72  mn S1 is earlier
107c0 20 69 6e 0a 74 68 65 20 69 6e 64 65 78 20 62 2d   in.the index b-
107d0 74 72 65 65 20 74 68 61 6e 20 74 68 65 0a 65 6e  tree than the.en
107e0 74 72 79 20 77 69 74 68 20 6c 65 66 2d 6d 6f 73  try with lef-mos
107f0 74 20 63 6f 6c 75 6d 6e 20 53 32 2c 20 74 68 65  t column S2, the
10800 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  n in the sqlite_
10810 73 74 61 74 33 20 74 61 62 6c 65 2c 20 0a 73 61  stat3 table, .sa
10820 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68 61 76  mple S1 must hav
10830 65 20 61 20 73 6d 61 6c 6c 65 72 20 72 6f 77 69  e a smaller rowi
10840 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20 53 32  d than sample S2
10850 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
10860 67 6d 65 6e 74 20 73 74 61 74 34 74 61 62 20 7b  gment stat4tab {
10870 73 71 6c 69 74 65 5f 73 74 61 74 34 7d 20 53 51  sqlite_stat4} SQ
10880 4c 49 54 45 5f 53 54 41 54 34 3c 2f 74 63 6c 3e  LITE_STAT4</tcl>
10890 0a 3c 68 34 3e 32 2e 36 2e 36 20 54 68 65 20 73  .<h4>2.6.6 The s
108a0 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
108b0 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73  e</h4>..<p>The s
108c0 71 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20 6f  qlite_stat4 is o
108d0 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e 64 20  nly created and 
108e0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  is only used if 
108f0 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
10900 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45 5f  ed.with [SQLITE_
10910 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 61 6e  ENABLE_STAT4] an
10920 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  d if the SQLite 
10930 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69  version number i
10940 73 0a 33 2e 38 2e 31 20 6f 72 20 67 72 65 61 74  s.3.8.1 or great
10950 65 72 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f  er.  The sqlite_
10960 73 74 61 74 34 20 74 61 62 6c 65 20 69 73 20 6e  stat4 table is n
10970 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20  either read nor 
10980 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76  written by any.v
10990 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
109a0 20 62 65 66 6f 72 65 20 33 2e 38 2e 31 2e 0a 54   before 3.8.1..T
109b0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
109c0 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61  table contains a
109d0 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
109e0 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20  ation.about the 
109f0 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20  distribution of 
10a00 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69  keys within an i
10a10 6e 64 65 78 20 6f 72 20 74 68 65 20 64 69 73 74  ndex or the dist
10a20 72 69 62 75 74 69 6f 6e 20 6f 66 0a 6b 65 79 73  ribution of.keys
10a30 20 69 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20   in the primary 
10a40 6b 65 79 20 6f 66 20 61 20 5b 57 49 54 48 4f 55  key of a [WITHOU
10a50 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a  T ROWID] table..
10a60 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65  The query planne
10a70 72 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20  r can sometimes 
10a80 75 73 65 20 74 68 65 20 61 64 64 69 74 69 6f 6e  use the addition
10a90 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  al information i
10aa0 6e 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n.the sqlite_sta
10ab0 74 34 20 74 61 62 6c 65 20 74 6f 20 64 65 76 69  t4 table to devi
10ac0 73 65 20 62 65 74 74 65 72 20 61 6e 64 20 66 61  se better and fa
10ad0 73 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f 72  ster query algor
10ae0 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63 68  ithms..^(The sch
10af0 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ema of the sqlit
10b00 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69 73  e_stat4 table is
10b10 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62   as follows:..<b
10b20 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
10b30 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c  CREATE TABLE sql
10b40 69 74 65 5f 73 74 61 74 34 28 74 62 6c 2c 69 64  ite_stat4(tbl,id
10b50 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73  x,nEq,nLt,nDLt,s
10b60 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  ample);.</pre></
10b70 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
10b80 70 3e 54 68 65 72 65 20 61 72 65 20 74 79 70 69  p>There are typi
10b90 63 61 6c 6c 79 20 62 65 74 77 65 65 6e 20 31 30  cally between 10
10ba0 20 74 6f 20 34 30 20 65 6e 74 72 69 65 73 20 69   to 40 entries i
10bb0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
10bc0 74 34 20 74 61 62 6c 65 20 66 6f 72 0a 65 61 63  t4 table for.eac
10bd0 68 20 69 6e 64 65 78 20 66 6f 72 20 77 68 69 63  h index for whic
10be0 68 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65  h statistics are
10bf0 20 61 76 61 69 6c 61 62 6c 65 2c 20 68 6f 77 65   available, howe
10c00 76 65 72 20 74 68 65 73 65 20 6c 69 6d 69 74 73  ver these limits
10c10 20 61 72 65 0a 6e 6f 74 20 68 61 72 64 20 62 6f   are.not hard bo
10c20 75 6e 64 73 2e 0a 54 68 65 20 6d 65 61 6e 69 6e  unds..The meanin
10c30 67 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  gs of the column
10c40 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
10c50 73 74 61 74 34 20 74 61 62 6c 65 20 61 72 65 20  stat4 table are 
10c60 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65  as follows:..<ce
10c70 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  nter>.<table bor
10c80 64 65 72 3d 22 30 22 20 77 69 64 74 68 3d 22 31  der="0" width="1
10c90 30 30 25 22 20 63 65 6c 6c 70 61 64 64 69 6e 67  00%" cellpadding
10ca0 3d 22 31 30 22 3e 0a 3c 74 72 3e 3c 74 64 20 76  ="10">.<tr><td v
10cb0 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
10cc0 6e 3d 22 72 69 67 68 74 22 3e 74 62 6c 3a 3c 2f  n="right">tbl:</
10cd0 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68  td>.    <td>^(Th
10ce0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 74  e sqlite_stat4.t
10cf0 62 6c 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  bl column holds 
10d00 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
10d10 65 20 74 68 61 74 20 6f 77 6e 73 0a 20 20 20 20  e that owns.    
10d20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 74  the index that t
10d30 68 65 20 72 6f 77 20 64 65 73 63 72 69 62 65 73  he row describes
10d40 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  )^..<tr><td vali
10d50 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
10d60 72 69 67 68 74 22 3e 69 64 78 3a 3c 2f 74 64 3e  right">idx:</td>
10d70 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
10d80 71 6c 69 74 65 5f 73 74 61 74 34 2e 69 64 78 20  qlite_stat4.idx 
10d90 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d  column holds nam
10da0 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 74  e of the index t
10db0 68 61 74 20 74 68 65 0a 20 20 20 20 72 6f 77 20  hat the.    row 
10dc0 64 65 73 63 72 69 62 65 73 2c 20 6f 72 20 69 6e  describes, or in
10dd0 20 74 68 65 20 63 61 73 65 20 6f 66 0a 20 20 20   the case of.   
10de0 20 61 6e 20 73 71 6c 69 74 65 5f 73 74 61 74 34   an sqlite_stat4
10df0 20 65 6e 74 72 79 20 66 6f 72 20 61 20 5b 57 49   entry for a [WI
10e00 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
10e10 6c 65 2c 20 74 68 65 0a 20 20 20 20 6e 61 6d 65  le, the.    name
10e20 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69 74   of the table it
10e30 73 65 6c 66 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64  self.)^..<tr><td
10e40 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
10e50 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 61 6d 70  ign="right">samp
10e60 6c 65 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  le:</td>.    <td
10e70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
10e80 61 74 34 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d  at4.sample colum
10e90 6e 20 68 6f 6c 64 73 20 61 20 42 4c 4f 42 0a 20  n holds a BLOB. 
10ea0 20 20 20 69 6e 20 74 68 65 20 5b 72 65 63 6f 72     in the [recor
10eb0 64 20 66 6f 72 6d 61 74 5d 20 74 68 61 74 20 65  d format] that e
10ec0 6e 63 6f 64 65 73 20 74 68 65 20 69 6e 64 65 78  ncodes the index
10ed0 65 64 20 63 6f 6c 75 6d 6e 73 20 66 6f 6c 6c 6f  ed columns follo
10ee0 77 65 64 20 62 79 0a 20 20 20 20 74 68 65 20 72  wed by.    the r
10ef0 6f 77 69 64 20 66 6f 72 20 61 20 72 6f 77 69 64  owid for a rowid
10f00 20 74 61 62 6c 65 20 6f 72 20 62 79 20 74 68 65   table or by the
10f10 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
10f20 70 72 69 6d 61 72 79 20 6b 65 79 20 0a 20 20 20  primary key .   
10f30 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52   for a WITHOUT R
10f40 4f 57 49 44 20 74 61 62 6c 65 2e 29 5e 0a 20 20  OWID table.)^.  
10f50 20 20 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73    ^(The sqlite_s
10f60 74 61 74 34 2e 73 61 6d 70 6c 65 20 42 4c 4f 42  tat4.sample BLOB
10f70 20 66 6f 72 20 74 68 65 20 57 49 54 48 4f 55 54   for the WITHOUT
10f80 20 52 4f 57 49 44 20 74 61 62 6c 65 20 69 74 73   ROWID table its
10f90 65 6c 66 20 0a 20 20 20 20 63 6f 6e 74 61 69 6e  elf .    contain
10fa0 73 20 6a 75 73 74 20 74 68 65 20 63 6f 6c 75 6d  s just the colum
10fb0 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  ns of the primar
10fc0 79 20 6b 65 79 2e 29 5e 0a 20 20 20 20 4c 65 74  y key.)^.    Let
10fd0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
10fe0 6f 6c 75 6d 6e 73 20 65 6e 63 6f 64 65 64 20 62  olumns encoded b
10ff0 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  y the sqlite_sta
11000 74 34 2e 73 61 6d 70 6c 65 20 62 6c 6f 62 20 62  t4.sample blob b
11010 65 20 4e 2e 0a 20 20 20 20 5e 46 6f 72 20 69 6e  e N..    ^For in
11020 64 65 78 65 73 20 6f 6e 20 61 6e 20 6f 72 64 69  dexes on an ordi
11030 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65  nary rowid table
11040 2c 20 4e 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20  , N will be one 
11050 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e 75  more than the nu
11060 6d 62 65 72 20 0a 20 20 20 20 6f 66 20 63 6f 6c  mber .    of col
11070 75 6d 6e 73 20 69 6e 64 65 78 65 64 2e 0a 20 20  umns indexed..  
11080 20 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20 6f    ^For indexes o
11090 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  n WITHOUT ROWID 
110a0 74 61 62 6c 65 73 2c 20 4e 20 77 69 6c 6c 20 62  tables, N will b
110b0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
110c0 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 69 6e 64 65  columns.    inde
110d0 78 65 64 20 70 6c 75 73 20 74 68 65 20 6e 75 6d  xed plus the num
110e0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
110f0 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  n the primary ke
11100 79 2e 0a 20 20 20 20 5e 46 6f 72 20 61 20 57 49  y..    ^For a WI
11110 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
11120 65 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68 65  e, N will be the
11130 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
11140 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 70 72  ns in the.    pr
11150 69 6d 61 72 79 20 6b 65 79 2e 0a 0a 3c 74 72 3e  imary key...<tr>
11160 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
11170 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e   align="right">n
11180 45 71 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  Eq:</td>.    <td
11190 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
111a0 61 74 34 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68  at4.nEq column h
111b0 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20 4e  olds a list of N
111c0 20 69 6e 74 65 67 65 72 73 20 77 68 65 72 65 20   integers where 
111d0 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69 6e  .    the K-th in
111e0 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70  teger is the app
111f0 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20  roximate number 
11200 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  of entries in th
11210 65 20 69 6e 64 65 78 0a 20 20 20 20 77 68 6f 73  e index.    whos
11220 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f  e left-most K co
11230 6c 75 6d 6e 73 20 65 78 61 63 74 6c 79 20 6d 61  lumns exactly ma
11240 74 63 68 20 74 68 65 20 4b 20 6c 65 66 74 2d 6d  tch the K left-m
11250 6f 73 74 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20  ost columns.    
11260 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e  of the sample.)^
11270 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
11280 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
11290 67 68 74 22 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a 20  ght">nLt:</td>. 
112a0 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
112b0 69 74 65 5f 73 74 61 74 34 2e 6e 4c 74 20 63 6f  ite_stat4.nLt co
112c0 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73  lumn holds a lis
112d0 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73 20  t of N integers 
112e0 77 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b 2d  where.    the K-
112f0 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74 68  th integer is th
11300 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75  e approximate nu
11310 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
11320 69 6e 20 74 68 65 0a 20 20 20 20 69 6e 64 65 78  in the.    index
11330 20 77 68 6f 73 65 20 4b 20 6c 65 66 74 2d 6d 6f   whose K left-mo
11340 73 74 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63  st columns are c
11350 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73  ollectively less
11360 20 74 68 61 6e 20 74 68 65 20 0a 20 20 20 20 4b   than the .    K
11370 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
11380 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65  ns of the sample
11390 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  .)^..<tr><td val
113a0 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
113b0 22 72 69 67 68 74 22 3e 6e 44 4c 74 3a 3c 2f 74  "right">nDLt:</t
113c0 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65  d>.    <td>^(The
113d0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 44   sqlite_stat4.nD
113e0 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  Lt column holds 
113f0 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74 65  a list of N inte
11400 67 65 72 73 20 77 68 65 72 65 0a 20 20 20 20 74  gers where.    t
11410 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 73  he K-th integers
11420 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
11430 61 74 65 0a 20 20 20 20 6e 75 6d 62 65 72 20 6f  ate.    number o
11440 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  f entries in the
11450 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20   index that are 
11460 64 69 73 74 69 6e 63 74 20 69 6e 20 74 68 65 20  distinct in the 
11470 66 69 72 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20  first K columns 
11480 61 6e 64 0a 20 20 20 20 74 68 61 74 20 61 72 65  and.    that are
11490 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74   whose left-most
114a0 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63   K columns are c
114b0 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73 73  ollectively less
114c0 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74 2d 6d   than the left-m
114d0 6f 73 74 0a 20 20 20 20 4b 20 63 6f 6c 75 6d 6e  ost.    K column
114e0 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e  s of the sample.
114f0 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  )^.</table>.</ce
11500 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20 73 71  nter>..<p>The sq
11510 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20 61 20  lite_stat4 is a 
11520 67 65 6e 65 72 61 6c 69 7a 61 74 69 6f 6e 20 6f  generalization o
11530 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
11540 74 33 20 74 61 62 6c 65 2e 20 20 54 68 65 0a 73  t3 table.  The.s
11550 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
11560 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66 6f 72  e provides infor
11570 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
11580 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
11590 6e 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20 77 68  n of an.index wh
115a0 65 72 65 61 73 20 74 68 65 20 73 71 6c 69 74 65  ereas the sqlite
115b0 5f 73 74 61 74 34 20 74 61 62 6c 65 20 70 72 6f  _stat4 table pro
115c0 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f  vides informatio
115d0 6e 20 61 62 6f 75 74 20 61 6c 6c 20 63 6f 6c 75  n about all colu
115e0 6d 6e 73 0a 6f 66 20 74 68 65 20 69 6e 64 65 78  mns.of the index
115f0 2e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e  ...<p>^There can
11600 20 62 65 20 61 6e 20 61 72 62 69 74 72 61 72 79   be an arbitrary
11610 20 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c 69 74   number of sqlit
11620 65 5f 73 74 61 74 34 20 65 6e 74 72 69 65 73 20  e_stat4 entries 
11630 70 65 72 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b  per index..The [
11640 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64  ANALYZE] command
11650 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20   will typically 
11660 67 65 6e 65 72 61 74 65 20 73 71 6c 69 74 65 5f  generate sqlite_
11670 73 74 61 74 34 20 74 61 62 6c 65 73 0a 74 68 61  stat4 tables.tha
11680 74 20 63 6f 6e 74 61 69 6e 20 62 65 74 77 65 65  t contain betwee
11690 6e 20 31 30 20 61 6e 64 20 34 30 20 73 61 6d 70  n 10 and 40 samp
116a0 6c 65 73 20 74 68 61 74 20 61 72 65 20 64 69 73  les that are dis
116b0 74 72 69 62 75 74 65 64 20 61 63 72 6f 73 73 0a  tributed across.
116c0 74 68 65 20 6b 65 79 20 73 70 61 63 65 20 61 6e  the key space an
116d0 64 20 77 69 74 68 20 6c 61 72 67 65 20 6e 45 71  d with large nEq
116e0 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49   values...<p>^(I
116f0 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
11700 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
11710 6c 65 2c 20 74 68 65 20 73 61 6d 70 6c 65 73 20  le, the samples 
11720 66 6f 72 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69  for any single.i
11730 6e 64 65 78 20 6d 75 73 74 20 61 70 70 65 61 72  ndex must appear
11740 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6f 72 64   in the same ord
11750 65 72 20 74 68 61 74 20 74 68 65 79 20 6f 63 63  er that they occ
11760 75 72 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ur in the index.
11770 20 20 0a 49 6e 20 6f 74 68 65 72 20 77 6f 72 64    .In other word
11780 73 2c 20 69 66 20 65 6e 74 72 79 20 53 31 20 69  s, if entry S1 i
11790 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65  s earlier in the
117a0 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 74 68   index b-tree th
117b0 61 6e 20 0a 65 6e 74 72 79 20 53 32 2c 20 74 68  an .entry S2, th
117c0 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  en in the sqlite
117d0 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20 73 61  _stat4 table, sa
117e0 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68 61 76  mple S1 must hav
117f0 65 20 61 0a 73 6d 61 6c 6c 65 72 20 72 6f 77 69  e a.smaller rowi
11800 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20 53 32  d than sample S2
11810 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
11820 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f  gment rollbackjo
11830 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20  urnal {rollback 
11840 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c  journal format}<
11850 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e 30 20 54 68  /tcl>.<h2>3.0 Th
11860 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e  e Rollback Journ
11870 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20  al</h2>..<p>The 
11880 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
11890 20 69 73 20 61 20 66 69 6c 65 20 61 73 73 6f 63   is a file assoc
118a0 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
118b0 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a  SQLite database.
118c0 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64 20 69  file that hold i
118d0 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
118e0 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65 20 64  to restore the d
118f0 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
11900 69 74 73 20 69 6e 69 74 69 61 6c 0a 73 74 61 74  its initial.stat
11910 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 75  e during the cou
11920 72 73 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63  rse of a transac
11930 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62  tion..^The rollb
11940 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
11950 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74   is always locat
11960 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 0a  ed in the same .
11970 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65  directory as the
11980 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61   database.file a
11990 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  nd has the same 
119a0 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74 61  name as the data
119b0 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77 69  base file but wi
119c0 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c  th the string."<
119d0 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e  tt>-journal</tt>
119e0 22 20 61 70 70 65 6e 64 65 64 2e 20 20 54 68 65  " appended.  The
119f0 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61  re can only be a
11a00 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b   single rollback
11a10 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63 69 61   journal.associa
11a20 74 65 64 20 77 69 74 68 20 61 20 67 69 76 65 20  ted with a give 
11a30 64 61 74 61 62 61 73 65 20 61 6e 64 20 68 65 6e  database and hen
11a40 63 65 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c  ce there can onl
11a50 79 20 62 65 20 6f 6e 65 20 77 72 69 74 65 0a 74  y be one write.t
11a60 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65 6e 20  ransaction open 
11a70 61 67 61 69 6e 73 74 20 61 20 73 69 6e 67 6c 65  against a single
11a80 20 64 61 74 61 62 61 73 65 20 61 74 20 6f 6e 65   database at one
11a90 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49   time.</p>..<p>I
11aa0 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  f a transaction 
11ab0 69 73 20 61 62 6f 72 74 65 64 20 64 75 65 20 74  is aborted due t
11ac0 6f 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  o an application
11ad0 20 63 72 61 73 68 2c 20 61 6e 20 6f 70 65 72 61   crash, an opera
11ae0 74 69 6e 67 0a 73 79 73 74 65 6d 20 63 72 61 73  ting.system cras
11af0 68 2c 20 6f 72 20 61 20 68 61 72 64 77 61 72 65  h, or a hardware
11b00 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f   power failure o
11b10 72 20 63 72 61 73 68 2c 20 74 68 65 6e 20 74 68  r crash, then th
11b20 65 20 64 61 74 61 62 61 73 65 20 6d 61 79 0a 62  e database may.b
11b30 65 20 6c 65 66 74 20 69 6e 20 61 6e 20 69 6e 63  e left in an inc
11b40 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e  onsistent state.
11b50 20 20 5e 54 68 65 20 6e 65 78 74 20 74 69 6d 65    ^The next time
11b60 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73   SQLite attempts
11b70 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64 61 74   to open.the dat
11b80 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20  abase file, the 
11b90 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20  presence of the 
11ba0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
11bb0 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 0a 64   file will be .d
11bc0 65 74 65 63 74 65 64 20 61 6e 64 20 74 68 65 20  etected and the 
11bd0 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62 65 20  journal will be 
11be0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 6c  automatically pl
11bf0 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72 65 73  ayed back to res
11c00 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62 61 73  tore the.databas
11c10 65 20 74 6f 20 69 74 73 20 73 74 61 74 65 20 61  e to its state a
11c20 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  t the start of t
11c30 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72  he incomplete tr
11c40 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
11c50 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a  <p>^A rollback j
11c60 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79 20 63  ournal is only c
11c70 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
11c80 76 61 6c 69 64 20 69 66 20 69 74 20 65 78 69 73  valid if it exis
11c90 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e 73 20  ts and.contains 
11ca0 61 20 76 61 6c 69 64 20 68 65 61 64 65 72 2e 20  a valid header. 
11cb0 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73 61 63   Hence a transac
11cc0 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f 6d 6d  tion can be comm
11cd0 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f 66 20  itted in one.of 
11ce0 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e  three ways:.<ol>
11cf0 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62  .<li>^(The rollb
11d00 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
11d10 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65 64 29   can be deleted)
11d20 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c  ^,.<li>^(The rol
11d30 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
11d40 6c 65 20 63 61 6e 20 62 65 20 74 72 75 6e 63 61  le can be trunca
11d50 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65 6e 67  ted to zero leng
11d60 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54  th)^, or.<li>^(T
11d70 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
11d80 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
11d90 6c 20 63 61 6e 20 62 65 20 6f 76 65 72 77 72 69  l can be overwri
11da0 74 74 65 6e 20 77 69 74 68 0a 69 6e 76 61 6c 69  tten with.invali
11db0 64 20 68 65 61 64 65 72 20 74 65 78 74 20 28 66  d header text (f
11dc0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20  or example, all 
11dd0 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a  zeros).)^.</ol>.
11de0 5e 54 68 65 73 65 20 74 68 72 65 65 20 77 61 79  ^These three way
11df0 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20  s of committing 
11e00 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  a transaction co
11e10 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20  rrespond to the 
11e20 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41 54 45  DELETE,.TRUNCATE
11e30 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20 73 65  , and PERSIST se
11e40 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63 74 69  ttings, respecti
11e50 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f  vely, of the [jo
11e60 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d  urnal_mode pragm
11e70 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20  a]..</p>...<p>A 
11e80 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a  valid rollback j
11e90 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20 77 69  ournal begins wi
11ea0 74 68 20 61 20 68 65 61 64 65 72 20 69 6e 20 74  th a header in t
11eb0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
11ec0 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  mat:</p>..<cente
11ed0 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a  r>.<i>Rollback J
11ee0 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20 46 6f  ournal Header Fo
11ef0 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
11f00 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
11f10 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
11f20 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
11f30 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
11f40 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
11f50 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
11f60 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  0.    <td valign
11f70 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11f80 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65 61 64  r>8.    <td>Head
11f90 65 72 20 73 74 72 69 6e 67 3a 20 20 30 78 64 39  er string:  0xd9
11fa0 2c 20 30 78 64 35 2c 20 30 78 30 35 2c 20 30 78  , 0xd5, 0x05, 0x
11fb0 66 39 2c 20 30 78 32 30 2c 20 30 78 61 31 2c 20  f9, 0x20, 0xa1, 
11fc0 30 78 36 33 2c 20 30 78 64 37 0a 3c 74 72 3e 3c  0x63, 0xd7.<tr><
11fd0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
11fe0 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20  ign=center>8.   
11ff0 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
12000 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
12010 20 20 20 3c 74 64 3e 54 68 65 20 22 50 61 67 65     <td>The "Page
12020 20 43 6f 75 6e 74 22 20 2d 20 54 68 65 20 6e 75   Count" - The nu
12030 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
12040 20 74 68 65 20 6e 65 78 74 20 73 65 67 6d 65 6e   the next segmen
12050 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20 20 20  t of the .      
12060 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d 31    journal, or -1
12070 20 74 6f 0a 20 20 20 20 20 20 20 20 6d 65 61 6e   to.        mean
12080 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74 6f 20   all content to 
12090 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 66  the end of the f
120a0 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ile.<tr><td vali
120b0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
120c0 74 65 72 3e 31 32 0a 20 20 20 20 3c 74 64 20 76  ter>12.    <td v
120d0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
120e0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
120f0 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20  >A random nonce 
12100 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73 75 6d  for the checksum
12110 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12120 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12130 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >16.    <td vali
12140 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12150 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e  ter>4.    <td>In
12160 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  itial size of th
12170 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 70 61  e database in pa
12180 67 65 73 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ges.<tr><td vali
12190 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
121a0 74 65 72 3e 32 30 0a 20 20 20 20 3c 74 64 20 76  ter>20.    <td v
121b0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
121c0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
121d0 3e 53 69 7a 65 20 6f 66 20 61 20 64 69 73 6b 20  >Size of a disk 
121e0 73 65 63 74 6f 72 20 61 73 73 75 6d 65 64 20 62  sector assumed b
121f0 79 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 68  y the process th
12200 61 74 20 77 72 6f 74 65 20 74 68 69 73 0a 20 20  at wrote this.  
12210 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e 0a 3c        journal..<
12220 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12230 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
12240 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
12250 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12260 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65  r>4.    <td>Size
12270 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 69   of pages in thi
12280 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f 74 61 62  s journal..</tab
12290 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c  le>.</center>..<
122a0 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  p>^A rollback jo
122b0 75 72 6e 61 6c 20 68 65 61 64 65 72 20 69 73 20  urnal header is 
122c0 70 61 64 64 65 64 20 77 69 74 68 20 7a 65 72 6f  padded with zero
122d0 73 20 6f 75 74 20 74 6f 20 74 68 65 20 73 69 7a  s out to the siz
122e0 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c 65 20 73  e of a .single s
122f0 65 63 74 6f 72 20 28 61 73 20 64 65 66 69 6e 65  ector (as define
12300 64 20 62 79 20 74 68 65 20 73 65 63 74 6f 72 20  d by the sector 
12310 73 69 7a 65 20 69 6e 74 65 67 65 72 20 61 74 20  size integer at 
12320 6f 66 66 73 65 74 20 32 30 29 2e 0a 54 68 65 20  offset 20)..The 
12330 68 65 61 64 65 72 20 69 73 20 69 6e 20 61 20 73  header is in a s
12340 65 63 74 6f 72 20 62 79 20 69 74 73 65 6c 66 20  ector by itself 
12350 73 6f 20 74 68 61 74 20 69 66 20 61 20 70 6f 77  so that if a pow
12360 65 72 20 6c 6f 73 73 20 6f 63 63 75 72 73 20 77  er loss occurs w
12370 68 69 6c 65 0a 77 72 69 74 69 6e 67 20 74 68 65  hile.writing the
12380 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f 72 6d 61   sector, informa
12390 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77  tion that follow
123a0 73 20 74 68 65 20 68 65 61 64 65 72 20 77 69 6c  s the header wil
123b0 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c 6c 79 29  l be.(hopefully)
123c0 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a   undamaged.</p>.
123d0 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68 65 20 68  .<p>^After the h
123e0 65 61 64 65 72 20 61 6e 64 20 7a 65 72 6f 20 70  eader and zero p
123f0 61 64 64 69 6e 67 20 61 72 65 20 7a 65 72 6f 20  adding are zero 
12400 6f 72 20 6d 6f 72 65 20 70 61 67 65 20 72 65 63  or more page rec
12410 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a 70 61 67  ords.  ^Each.pag
12420 65 20 72 65 63 6f 72 64 20 73 74 6f 72 65 73 20  e record stores 
12430 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 63 6f  a copy of the co
12440 6e 74 65 6e 74 20 6f 66 20 61 20 70 61 67 65 20  ntent of a page 
12450 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
12460 65 20 66 69 6c 65 0a 62 65 66 6f 72 65 20 69 74  e file.before it
12470 20 77 61 73 20 63 68 61 6e 67 65 64 2e 20 20 5e   was changed.  ^
12480 54 68 65 20 73 61 6d 65 20 70 61 67 65 20 6d 61  The same page ma
12490 79 20 6e 6f 74 20 61 70 70 65 61 72 20 6d 6f 72  y not appear mor
124a0 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69 74 68  e than once.with
124b0 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c  in a single roll
124c0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f  back journal..To
124d0 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69 6e 63   rollback an inc
124e0 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74  omplete transact
124f0 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73 0a 68  ion, a process.h
12500 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72 65 61  as merely to rea
12510 64 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  d the rollback j
12520 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65 67 69  ournal from begi
12530 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61 6e 64  nning to end and
12540 0a 77 72 69 74 65 20 70 61 67 65 73 20 66 6f 75  .write pages fou
12550 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61  nd in the journa
12560 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  l back into the 
12570 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
12580 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65   the.appropriate
12590 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   location.</p>..
125a0 3c 70 3e 4c 65 74 20 74 68 65 20 64 61 74 61 62  <p>Let the datab
125b0 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 28 74  ase page size (t
125c0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
125d0 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
125e0 74 20 32 34 20 0a 69 6e 20 74 68 65 20 6a 6f 75  t 24 .in the jou
125f0 72 6e 61 6c 20 68 65 61 64 65 72 29 20 62 65 20  rnal header) be 
12600 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f 72 6d  N..Then the form
12610 61 74 20 6f 66 20 61 20 70 61 67 65 20 72 65 63  at of a page rec
12620 6f 72 64 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ord is as follow
12630 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  s:</p>..<center>
12640 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  .<i>Rollback Jou
12650 72 6e 61 6c 20 50 61 67 65 20 52 65 63 6f 72 64  rnal Page Record
12660 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
12670 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
12680 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
12690 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
126a0 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
126b0 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
126c0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
126d0 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c  er>0.    <td val
126e0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
126f0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54  nter>4.    <td>T
12700 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
12710 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
12720 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ile.<tr><td vali
12730 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12740 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20 76 61  ter>4.    <td va
12750 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12760 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e  enter>N.    <td>
12770 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74  Original content
12780 20 6f 66 20 74 68 65 20 70 61 67 65 20 70 72 69   of the page pri
12790 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  or to the start 
127a0 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  of the transacti
127b0 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
127c0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
127d0 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76  er>N+4.    <td v
127e0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
127f0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12800 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f 74 61 62 6c  >Checksum.</tabl
12810 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c  e>.</center>...<
12820 70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d  p>^(The checksum
12830 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20   is an unsigned 
12840 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 63  32-bit integer c
12850 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c 6c 6f  omputed as follo
12860 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ws:</p>..<ol>.<l
12870 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  i>Initialize the
12880 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74 68 65   checksum to the
12890 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63 65 20   checksum nonce 
128a0 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e 20 74  value found in t
128b0 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  he.journal heade
128c0 72 20 61 74 20 6f 66 66 73 65 74 20 31 32 2e 0a  r at offset 12..
128d0 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 69  <li>Initialize i
128e0 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e 2d 32  ndex X to be N-2
128f0 30 30 20 28 77 68 65 72 65 20 4e 20 69 73 20 74  00 (where N is t
12900 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64 61 74  he size of a dat
12910 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20 62 79  abase page.in by
12920 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70 72  tes..<li>Interpr
12930 65 74 20 74 68 65 20 66 6f 75 72 20 62 79 74 65  et the four byte
12940 73 20 61 74 20 6f 66 66 73 65 74 20 58 20 69 6e  s at offset X in
12950 74 6f 20 74 68 65 20 70 61 67 65 20 61 73 20 61  to the page as a
12960 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
12970 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an.unsigned inte
12980 67 65 72 2e 20 20 41 64 64 20 74 68 65 20 76 61  ger.  Add the va
12990 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e 74 65  lue of that inte
129a0 67 65 72 20 74 6f 20 74 68 65 20 63 68 65 63 6b  ger to the check
129b0 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63  sum..<li>Subtrac
129c0 65 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c  e 200 from X..<l
129d0 69 3e 49 66 20 58 20 69 73 20 67 72 65 61 74 65  i>If X is greate
129e0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
129f0 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b  to zero, go back
12a00 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c   to step 3..</ol
12a10 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63  >)^..<p>The chec
12a20 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20 75 73  ksum value is us
12a30 65 64 20 74 6f 20 67 75 61 72 64 20 61 67 61 69  ed to guard agai
12a40 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77  nst incomplete w
12a50 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e  rites of.a journ
12a60 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64 20 66  al page record f
12a70 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65 72  ollowing a power
12a80 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64 69 66   failure.  A dif
12a90 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f  ferent random no
12aa0 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61 63 68  nce.is used each
12ab0 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61 63 74   time a transact
12ac0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 69  ion is started i
12ad0 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d  n order to minim
12ae0 69 7a 65 20 74 68 65 20 72 69 73 6b 0a 74 68 61  ize the risk.tha
12af0 74 20 75 6e 77 72 69 74 74 65 6e 20 73 65 63 74  t unwritten sect
12b00 6f 72 73 20 6d 69 67 68 74 20 62 79 20 63 68 61  ors might by cha
12b10 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64 61 74 61  nce contain data
12b20 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20 70   from the same p
12b30 61 67 65 0a 74 68 61 74 20 77 61 73 20 61 20 70  age.that was a p
12b40 61 72 74 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75  art of prior jou
12b50 72 6e 61 6c 73 2e 20 20 42 79 20 63 68 61 6e 67  rnals.  By chang
12b60 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f  ing the nonce fo
12b70 72 20 65 61 63 68 0a 74 72 61 6e 73 61 63 74 69  r each.transacti
12b80 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74 61 20 6f  on, stale data o
12b90 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c  n disk will stil
12ba0 6c 20 67 65 6e 65 72 61 74 65 20 61 6e 20 69 6e  l generate an in
12bb0 63 6f 72 72 65 63 74 20 63 68 65 63 6b 73 75 6d  correct checksum
12bc0 0a 61 6e 64 20 62 65 20 64 65 74 65 63 74 65 64  .and be detected
12bd0 20 77 69 74 68 20 68 69 67 68 20 70 72 6f 62 61   with high proba
12be0 62 69 6c 69 74 79 2e 20 20 54 68 65 20 63 68 65  bility.  The che
12bf0 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20  cksum only uses 
12c00 61 20 73 70 61 72 73 65 20 73 61 6d 70 6c 65 0a  a sparse sample.
12c10 6f 66 20 33 32 2d 62 69 74 20 77 6f 72 64 73 20  of 32-bit words 
12c20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20 72 65  from the data re
12c30 63 6f 72 64 20 66 6f 72 20 70 65 72 66 6f 72 6d  cord for perform
12c40 61 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d 20 64  ance reasons - d
12c50 65 73 69 67 6e 20 73 74 75 64 69 65 73 20 0a 64  esign studies .d
12c60 75 72 69 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69  uring the planni
12c70 6e 67 20 70 68 61 73 65 73 20 6f 66 20 53 51 4c  ng phases of SQL
12c80 69 74 65 20 33 2e 30 2e 30 20 73 68 6f 77 65 64  ite 3.0.0 showed
12c90 0a 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70  .a significant p
12ca0 65 72 66 6f 72 6d 61 6e 63 65 20 68 69 74 20 69  erformance hit i
12cb0 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74  n checksumming t
12cc0 68 65 20 65 6e 74 69 72 65 20 70 61 67 65 2e 3c  he entire page.<
12cd0 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20  /p>..<p>Let the 
12ce0 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
12cf0 20 61 74 20 6f 66 66 73 65 74 20 38 20 69 6e 20   at offset 8 in 
12d00 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  the journal head
12d10 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69  er be M..^If M i
12d20 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
12d30 65 72 6f 20 74 68 65 6e 20 61 66 74 65 72 20 4d  ero then after M
12d40 20 70 61 67 65 20 72 65 63 6f 72 64 73 20 74 68   page records th
12d50 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d  e journal file.m
12d60 61 79 20 62 65 20 7a 65 72 6f 20 70 61 64 64 65  ay be zero padde
12d70 64 20 6f 75 74 20 74 6f 20 74 68 65 20 6e 65 78  d out to the nex
12d80 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68  t multiple of th
12d90 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20 61 6e  e sector size an
12da0 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61  d another.journa
12db0 6c 20 68 65 61 64 65 72 20 6d 61 79 20 62 65 20  l header may be 
12dc0 69 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20  inserted.  ^All 
12dd0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 73 20  journal headers 
12de0 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a  within the same.
12df0 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e  journal must con
12e00 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61  tain the same da
12e10 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
12e20 20 61 6e 64 20 73 65 63 74 6f 72 20 73 69 7a 65   and sector size
12e30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20  .</p>..<p>^If M 
12e40 69 73 20 2d 31 20 69 6e 20 74 68 65 20 69 6e 69  is -1 in the ini
12e50 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61  tial journal hea
12e60 64 65 72 2c 20 74 68 65 6e 20 74 68 65 20 6e 75  der, then the nu
12e70 6d 62 65 72 20 6f 66 20 70 61 67 65 20 72 65 63  mber of page rec
12e80 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77  ords.that follow
12e90 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20   is computed by 
12ea0 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20 6d 61  computing how ma
12eb0 6e 79 20 70 61 67 65 20 72 65 63 6f 72 64 73 20  ny page records 
12ec0 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68 65 20  will fit in.the 
12ed0 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
12ee0 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  of the remainder
12ef0 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20   of the journal 
12f00 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  file.</p>..<tcl>
12f10 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 66  hd_fragment walf
12f20 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61  ormat {WAL forma
12f30 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 34 2e 30  t}</tcl>.<h2>4.0
12f40 20 54 68 65 20 57 72 69 74 65 2d 41 68 65 61 64   The Write-Ahead
12f50 20 4c 6f 67 3c 2f 68 32 3e 0a 0a 3c 70 3e 42 65   Log</h2>..<p>Be
12f60 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b 76 65  ginning with [ve
12f70 72 73 69 6f 6e 20 33 2e 37 2e 30 5d 2c 20 53 51  rsion 3.7.0], SQ
12f80 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 61 20  Lite supports a 
12f90 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  new transaction.
12fa0 63 6f 6e 74 72 6f 6c 20 6d 65 63 68 61 6e 69 73  control mechanis
12fb0 6d 20 63 61 6c 6c 65 64 20 22 5b 57 41 4c 20 7c  m called "[WAL |
12fc0 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67   write-ahead log
12fd0 5d 22 20 6f 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e  ]" or "[WAL]"..^
12fe0 57 68 65 6e 20 61 20 64 61 74 61 62 61 73 65 20  When a database 
12ff0 69 73 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2c 20  is in WAL mode, 
13000 61 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  all connections 
13010 74 6f 20 74 68 61 74 20 64 61 74 61 62 61 73 65  to that database
13020 20 6d 75 73 74 0a 75 73 65 20 74 68 65 20 57 41   must.use the WA
13030 4c 2e 20 20 5e 41 20 70 61 72 74 69 63 75 6c 61  L.  ^A particula
13040 72 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20  r database will 
13050 75 73 65 20 65 69 74 68 65 72 20 61 20 72 6f 6c  use either a rol
13060 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72  lback journal.or
13070 20 61 20 57 41 4c 2c 20 62 75 74 20 6e 6f 74 20   a WAL, but not 
13080 62 6f 74 68 20 61 74 20 74 68 65 20 73 61 6d 65  both at the same
13090 20 74 69 6d 65 2e 0a 5e 54 68 65 20 57 41 4c 20   time..^The WAL 
130a0 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65  is always locate
130b0 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69  d in the same di
130c0 72 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64  rectory as the d
130d0 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64  atabase.file and
130e0 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61   has the same na
130f0 6d 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61  me as the databa
13100 73 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68  se file but with
13110 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74   the string."<tt
13120 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65  >-wal</tt>" appe
13130 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34  nded.</p>..<h3>4
13140 2e 31 20 57 41 4c 20 46 69 6c 65 20 46 6f 72 6d  .1 WAL File Form
13150 61 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 41 20 57 41  at</h4>..<p>A WA
13160 4c 20 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20  L file consists 
13170 6f 66 20 61 20 68 65 61 64 65 72 20 66 6f 6c 6c  of a header foll
13180 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20  owed by zero or 
13190 6d 6f 72 65 20 22 66 72 61 6d 65 73 22 2e 0a 45  more "frames"..E
131a0 61 63 68 20 66 72 61 6d 65 20 72 65 63 6f 72 64  ach frame record
131b0 73 20 74 68 65 20 72 65 76 69 73 65 64 20 63 6f  s the revised co
131c0 6e 74 65 6e 74 20 6f 66 20 61 20 73 69 6e 67 6c  ntent of a singl
131d0 65 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 0a  e page from the.
131e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
131f0 41 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f 20 74  All changes to t
13200 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
13210 72 65 63 6f 72 64 65 64 20 62 79 20 77 72 69 74  recorded by writ
13220 69 6e 67 0a 66 72 61 6d 65 73 20 69 6e 74 6f 20  ing.frames into 
13230 74 68 65 20 57 41 4c 2e 20 20 54 72 61 6e 73 61  the WAL.  Transa
13240 63 74 69 6f 6e 73 20 63 6f 6d 6d 69 74 20 77 68  ctions commit wh
13250 65 6e 20 61 20 66 72 61 6d 65 20 69 73 20 77 72  en a frame is wr
13260 69 74 74 65 6e 20 74 68 61 74 0a 63 6f 6e 74 61  itten that.conta
13270 69 6e 73 20 61 20 63 6f 6d 6d 69 74 20 6d 61 72  ins a commit mar
13280 6b 65 72 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20  ker.  ^A single 
13290 57 41 4c 20 63 61 6e 20 61 6e 64 20 75 73 75 61  WAL can and usua
132a0 6c 6c 79 20 64 6f 65 73 20 72 65 63 6f 72 64 20  lly does record 
132b0 0a 6d 75 6c 74 69 70 6c 65 20 74 72 61 6e 73 61  .multiple transa
132c0 63 74 69 6f 6e 73 2e 20 20 50 65 72 69 6f 64 69  ctions.  Periodi
132d0 63 61 6c 6c 79 2c 20 74 68 65 20 63 6f 6e 74 65  cally, the conte
132e0 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73  nt of the WAL is
132f0 0a 74 72 61 6e 73 66 65 72 72 65 64 20 62 61 63  .transferred bac
13300 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  k into the datab
13310 61 73 65 20 66 69 6c 65 20 69 6e 20 61 6e 20 6f  ase file in an o
13320 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c 65 64 20  peration called 
13330 61 0a 22 63 68 65 63 6b 70 6f 69 6e 74 22 2e 3c  a."checkpoint".<
13340 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69 6e 67 6c  /p>..<p>^A singl
13350 65 20 57 41 4c 20 66 69 6c 65 20 63 61 6e 20 62  e WAL file can b
13360 65 20 72 65 75 73 65 64 20 6d 75 6c 74 69 70 6c  e reused multipl
13370 65 20 74 69 6d 65 73 2e 20 20 5e 49 6e 20 6f 74  e times.  ^In ot
13380 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a 57  her words, the.W
13390 41 4c 20 63 61 6e 20 66 69 6c 6c 20 75 70 20 77  AL can fill up w
133a0 69 74 68 20 66 72 61 6d 65 73 20 61 6e 64 20 74  ith frames and t
133b0 68 65 6e 20 62 65 20 63 68 65 63 6b 70 6f 69 6e  hen be checkpoin
133c0 74 65 64 20 61 6e 64 20 74 68 65 6e 20 6e 65 77  ted and then new
133d0 0a 66 72 61 6d 65 73 20 63 61 6e 20 6f 76 65 72  .frames can over
133e0 77 72 69 74 65 20 74 68 65 20 6f 6c 64 20 6f 6e  write the old on
133f0 65 73 2e 20 20 5e 41 20 57 41 4c 20 61 6c 77 61  es.  ^A WAL alwa
13400 79 73 20 67 72 6f 77 73 20 66 72 6f 6d 20 62 65  ys grows from be
13410 67 69 6e 6e 69 6e 67 0a 74 6f 77 61 72 64 20 74  ginning.toward t
13420 68 65 20 65 6e 64 2e 20 20 43 68 65 63 6b 73 75  he end.  Checksu
13430 6d 73 20 61 6e 64 20 63 6f 75 6e 74 65 72 73 20  ms and counters 
13440 61 74 74 61 63 68 65 64 20 74 6f 20 65 61 63 68  attached to each
13450 20 66 72 61 6d 65 20 61 72 65 0a 75 73 65 64 20   frame are.used 
13460 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  to determine whi
13470 63 68 20 66 72 61 6d 65 73 20 77 69 74 68 69 6e  ch frames within
13480 20 74 68 65 20 57 41 4c 20 61 72 65 20 76 61 6c   the WAL are val
13490 69 64 20 61 6e 64 20 77 68 69 63 68 0a 61 72 65  id and which.are
134a0 20 6c 65 66 74 6f 76 65 72 73 20 66 72 6f 6d 20   leftovers from 
134b0 70 72 69 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  prior checkpoint
134c0 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  s.</p>..<p>^(The
134d0 20 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 33   WAL header is 3
134e0 32 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 20  2 bytes in size 
134f0 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  and consists of 
13500 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 69  the following ei
13510 67 68 74 0a 62 69 67 2d 65 6e 64 69 61 6e 20 33  ght.big-endian 3
13520 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 69  2-bit unsigned i
13530 6e 74 65 67 65 72 20 76 61 6c 75 65 73 3a 3c 2f  nteger values:</
13540 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
13550 57 41 4c 20 48 65 61 64 65 72 20 46 6f 72 6d 61  WAL Header Forma
13560 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
13570 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
13580 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
13590 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
135a0 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
135b0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
135c0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74  align=center>0<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 34 0a 20 20 20 20  gn=center>4.    
135f0 3c 74 64 3e 4d 61 67 69 63 20 6e 75 6d 62 65 72  <td>Magic number
13600 2e 20 20 30 78 33 37 37 66 30 36 38 32 20 6f 72  .  0x377f0682 or
13610 20 30 78 33 37 37 66 30 36 38 33 0a 3c 74 72 3e   0x377f0683.<tr>
13620 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13630 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
13640 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13650 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
13660 74 64 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20 76  td>File format v
13670 65 72 73 69 6f 6e 2e 20 20 43 75 72 72 65 6e 74  ersion.  Current
13680 6c 79 20 33 30 30 37 30 30 30 2e 0a 3c 74 72 3e  ly 3007000..<tr>
13690 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
136a0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
136b0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
136c0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
136d0 74 64 3e 44 61 74 61 62 61 73 65 20 70 61 67 65  td>Database page
136e0 20 73 69 7a 65 2e 20 20 45 78 61 6d 70 6c 65 3a   size.  Example:
136f0 20 31 30 32 34 0a 3c 74 72 3e 3c 74 64 20 76 61   1024.<tr><td va
13700 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13710 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69  enter>12<td vali
13720 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13730 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
13740 65 63 6b 70 6f 69 6e 74 20 73 65 71 75 65 6e 63  eckpoint sequenc
13750 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64  e number.<tr><td
13760 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13770 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76  n=center>16<td v
13780 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13790 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
137a0 3e 53 61 6c 74 2d 31 3a 20 72 61 6e 64 6f 6d 20  >Salt-1: random 
137b0 69 6e 74 65 67 65 72 20 69 6e 63 72 65 6d 65 6e  integer incremen
137c0 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68  ted with each ch
137d0 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64  eckpoint.<tr><td
137e0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
137f0 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
13800 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13810 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13820 3e 53 61 6c 74 2d 32 3a 20 61 20 64 69 66 66 65  >Salt-2: a diffe
13830 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 75 6d 62  rent random numb
13840 65 72 20 66 6f 72 20 65 61 63 68 20 63 68 65 63  er for each chec
13850 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76  kpoint.<tr><td v
13860 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13870 63 65 6e 74 65 72 3e 32 34 3c 74 64 20 76 61 6c  center>24<td val
13880 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13890 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
138a0 68 65 63 6b 73 75 6d 2d 31 3a 20 46 69 72 73 74  hecksum-1: First
138b0 20 70 61 72 74 20 6f 66 20 61 20 63 68 65 63 6b   part of a check
138c0 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74  sum on the first
138d0 20 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61   24 bytes of hea
138e0 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  der.<tr><td vali
138f0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13900 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e  ter>28<td valign
13910 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13920 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
13930 6b 73 75 6d 2d 32 3a 20 53 65 63 6f 6e 64 20 70  ksum-2: Second p
13940 61 72 74 20 6f 66 20 74 68 65 20 63 68 65 63 6b  art of the check
13950 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72 73 74  sum on the first
13960 20 32 34 20 62 79 74 65 73 20 6f 66 20 68 65 61   24 bytes of hea
13970 64 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  der.</table>.</c
13980 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d  enter>)^..<p>^Im
13990 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
139a0 69 6e 67 20 74 68 65 20 77 61 6c 2d 68 65 61 64  ing the wal-head
139b0 65 72 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d  er are zero or m
139c0 6f 72 65 20 66 72 61 6d 65 73 2e 20 5e 45 61 63  ore frames. ^Eac
139d0 68 0a 66 72 61 6d 65 20 63 6f 6e 73 69 73 74 73  h.frame consists
139e0 20 6f 66 20 61 20 32 34 2d 62 79 74 65 20 66 72   of a 24-byte fr
139f0 61 6d 65 2d 68 65 61 64 65 72 20 66 6f 6c 6c 6f  ame-header follo
13a00 77 65 64 20 62 79 20 61 20 3c 69 3e 70 61 67 65  wed by a <i>page
13a10 2d 73 69 7a 65 3c 2f 69 3e 20 62 79 74 65 73 0a  -size</i> bytes.
13a20 6f 66 20 70 61 67 65 20 64 61 74 61 2e 20 5e 28  of page data. ^(
13a30 54 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  The frame-header
13a40 20 69 73 20 73 69 78 20 62 69 67 2d 65 6e 64 69   is six big-endi
13a50 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e  an 32-bit unsign
13a60 65 64 20 0a 69 6e 74 65 67 65 72 20 76 61 6c 75  ed .integer valu
13a70 65 73 2c 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  es, as follows:.
13a80 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c  .<center>.<i>WAL
13a90 20 46 72 61 6d 65 20 48 65 61 64 65 72 20 46 6f   Frame Header Fo
13aa0 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
13ab0 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
13ac0 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
13ad0 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
13ae0 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
13af0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13b00 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13b10 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
13b20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13b30 20 20 20 3c 74 64 3e 50 61 67 65 20 6e 75 6d 62     <td>Page numb
13b40 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
13b50 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13b60 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>4<td valign=t
13b70 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13b80 34 0a 20 20 20 20 3c 74 64 3e 46 6f 72 20 63 6f  4.    <td>For co
13b90 6d 6d 69 74 20 72 65 63 6f 72 64 73 2c 20 74 68  mmit records, th
13ba0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61  e size of the da
13bb0 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
13bc0 61 67 65 73 0a 20 20 20 20 20 20 20 20 61 66 74  ages.        aft
13bd0 65 72 20 74 68 65 20 63 6f 6d 6d 69 74 2e 20 20  er the commit.  
13be0 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 72 65  For all other re
13bf0 63 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a 3c 74 72  cords, zero..<tr
13c00 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13c10 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74  align=center>8<t
13c20 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c30 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
13c40 3c 74 64 3e 53 61 6c 74 2d 31 20 63 6f 70 69 65  <td>Salt-1 copie
13c50 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68  d from the WAL h
13c60 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  eader.<tr><td va
13c70 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13c80 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61 6c 69  enter>12<td vali
13c90 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13ca0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61  ter>4.    <td>Sa
13cb0 6c 74 2d 32 20 63 6f 70 69 65 64 20 66 72 6f 6d  lt-2 copied from
13cc0 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a   the WAL header.
13cd0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13ce0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13cf0 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  16<td valign=top
13d00 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13d10 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
13d20 2d 31 3a 20 20 43 75 6d 75 6c 61 74 69 76 65 20  -1:  Cumulative 
13d30 63 68 65 63 6b 73 75 6d 20 75 70 20 74 68 72 6f  checksum up thro
13d40 75 67 68 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e  ugh and includin
13d50 67 20 74 68 69 73 20 70 61 67 65 0a 3c 74 72 3e  g this page.<tr>
13d60 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13d70 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74  lign=center>20<t
13d80 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13d90 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
13da0 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20  <td>Checksum-2: 
13db0 20 53 65 63 6f 6e 64 20 68 61 6c 66 20 6f 66 20   Second half of 
13dc0 74 68 65 20 63 75 6d 75 6c 61 74 69 76 65 20 63  the cumulative c
13dd0 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61 62 6c 65  hecksum..</table
13de0 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 5e  >.</center>)^..^
13df0 28 3c 70 3e 41 20 66 72 61 6d 65 20 69 73 20 63  (<p>A frame is c
13e00 6f 6e 73 69 64 65 72 65 64 20 76 61 6c 69 64 20  onsidered valid 
13e10 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74  if and only if t
13e20 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e  he following con
13e30 64 69 74 69 6f 6e 73 20 61 72 65 0a 74 72 75 65  ditions are.true
13e40 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
13e50 3c 70 3e 54 68 65 20 73 61 6c 74 2d 31 20 61 6e  <p>The salt-1 an
13e60 64 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 73 20  d salt-2 values 
13e70 69 6e 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61  in the frame-hea
13e80 64 65 72 20 6d 61 74 63 68 0a 20 20 20 20 20 20  der match.      
13e90 20 73 61 6c 74 20 76 61 6c 75 65 73 20 69 6e 20   salt values in 
13ea0 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72 3c 2f  the wal-header</
13eb0 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e  p></li>..<li><p>
13ec0 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c  The checksum val
13ed0 75 65 73 20 69 6e 20 74 68 65 20 66 69 6e 61 6c  ues in the final
13ee0 20 38 20 62 79 74 65 73 20 6f 66 20 74 68 65 20   8 bytes of the 
13ef0 66 72 61 6d 65 2d 68 65 61 64 65 72 0a 20 20 20  frame-header.   
13f00 20 20 20 20 65 78 61 63 74 6c 79 20 6d 61 74 63      exactly matc
13f10 68 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 63  h the checksum c
13f20 6f 6d 70 75 74 65 64 20 63 6f 6e 73 65 63 75 74  omputed consecut
13f30 69 76 65 6c 79 20 6f 6e 20 74 68 65 0a 20 20 20  ively on the.   
13f40 20 20 20 20 66 69 72 73 74 20 32 34 20 62 79 74      first 24 byt
13f50 65 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68 65  es of the WAL he
13f60 61 64 65 72 20 61 6e 64 20 74 68 65 20 66 69 72  ader and the fir
13f70 73 74 20 38 20 62 79 74 65 73 20 61 6e 64 0a 20  st 8 bytes and. 
13f80 20 20 20 20 20 20 74 68 65 20 63 6f 6e 74 65 6e        the conten
13f90 74 20 6f 66 20 61 6c 6c 20 66 72 61 6d 65 73 0a  t of all frames.
13fa0 20 20 20 20 20 20 20 75 70 20 74 6f 20 61 6e 64         up to and
13fb0 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 63   including the c
13fc0 75 72 72 65 6e 74 20 66 72 61 6d 65 2e 3c 2f 70  urrent frame.</p
13fd0 3e 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c  ></li></li>.</ol
13fe0 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  >)^..<tcl>hd_fra
13ff0 67 6d 65 6e 74 20 77 61 6c 63 6b 73 6d 20 7b 57  gment walcksm {W
14000 41 4c 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f  AL checksum algo
14010 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  rithm}</tcl>.<h3
14020 3e 34 2e 32 20 43 68 65 63 6b 73 75 6d 20 41 6c  >4.2 Checksum Al
14030 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70  gorithm</h3>..<p
14040 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73  >The checksum is
14050 20 63 6f 6d 70 75 74 65 64 20 62 79 20 69 6e 74   computed by int
14060 65 72 70 72 65 74 69 6e 67 20 74 68 65 20 69 6e  erpreting the in
14070 70 75 74 20 61 73 0a 61 6e 20 65 76 65 6e 20 6e  put as.an even n
14080 75 6d 62 65 72 20 6f 66 20 75 6e 73 69 67 6e 65  umber of unsigne
14090 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  d 32-bit integer
140a0 73 3a 20 78 28 30 29 20 74 68 72 6f 75 67 68 20  s: x(0) through 
140b0 78 28 4e 29 2e 0a 5e 54 68 65 20 33 32 2d 62 69  x(N)..^The 32-bi
140c0 74 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 62  t integers are b
140d0 69 67 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65  ig-endian if the
140e0 0a 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 6e  .magic number in
140f0 20 74 68 65 20 66 69 72 73 74 20 34 20 62 79 74   the first 4 byt
14100 65 73 20 6f 66 20 74 68 65 20 57 41 4c 20 68 65  es of the WAL he
14110 61 64 65 72 20 69 73 20 30 78 33 37 37 66 30 36  ader is 0x377f06
14120 38 33 20 61 6e 64 0a 74 68 65 20 69 6e 74 65 67  83 and.the integ
14130 65 72 73 20 61 72 65 20 6c 69 74 74 6c 65 2d 65  ers are little-e
14140 6e 64 69 61 6e 20 69 66 20 74 68 65 20 6d 61 67  ndian if the mag
14150 69 63 20 6e 75 6d 62 65 72 20 69 73 20 30 78 33  ic number is 0x3
14160 37 37 66 30 36 38 32 2e 0a 5e 54 68 65 20 63 68  77f0682..^The ch
14170 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 61 72  ecksum values ar
14180 65 20 61 6c 77 61 79 73 20 73 74 6f 72 65 64 20  e always stored 
14190 69 6e 20 74 68 65 20 66 72 61 6d 65 20 68 65 61  in the frame hea
141a0 64 65 72 20 69 6e 20 61 0a 62 69 67 2d 65 6e 64  der in a.big-end
141b0 69 61 6e 20 66 6f 72 6d 61 74 20 72 65 67 61 72  ian format regar
141c0 64 6c 65 73 73 20 6f 66 20 77 68 69 63 68 20 62  dless of which b
141d0 79 74 65 20 6f 72 64 65 72 20 69 73 20 75 73 65  yte order is use
141e0 64 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65  d to compute.the
141f0 20 63 68 65 63 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a   checksum.</p>..
14200 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  <p>The checksum 
14210 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c 79 20 77  algorithm only w
14220 6f 72 6b 73 20 66 6f 72 20 63 6f 6e 74 65 6e 74  orks for content
14230 20 77 68 69 63 68 20 69 73 20 61 20 6d 75 6c 74   which is a mult
14240 69 70 6c 65 20 6f 66 0a 38 20 62 79 74 65 73 20  iple of.8 bytes 
14250 69 6e 20 6c 65 6e 67 74 68 2e 20 20 49 6e 20 6f  in length.  In o
14260 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
14270 68 65 20 69 6e 70 75 74 73 20 61 72 65 20 78 28  he inputs are x(
14280 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29 0a  0) through x(N).
14290 74 68 65 6e 20 4e 20 6d 75 73 74 20 62 65 20 6f  then N must be o
142a0 64 64 2e 0a 5e 28 54 68 65 20 63 68 65 63 6b 73  dd..^(The checks
142b0 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  um algorithm is 
142c0 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c  as follows:..<bl
142d0 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 20 0a  ockquote><pre> .
142e0 73 30 20 3d 20 73 31 20 3d 20 30 0a 66 6f 72 20  s0 = s1 = 0.for 
142f0 69 20 66 72 6f 6d 20 30 20 74 6f 20 6e 2d 31 20  i from 0 to n-1 
14300 73 74 65 70 20 32 3a 0a 20 20 20 73 30 20 2b 3d  step 2:.   s0 +=
14310 20 78 28 69 29 20 2b 20 73 31 3b 0a 20 20 20 73   x(i) + s1;.   s
14320 31 20 2b 3d 20 78 28 69 2b 31 29 20 2b 20 73 30  1 += x(i+1) + s0
14330 3b 0a 65 6e 64 66 6f 72 0a 23 20 72 65 73 75 6c  ;.endfor.# resul
14340 74 20 69 6e 20 73 30 20 61 6e 64 20 73 31 0a 3c  t in s0 and s1.<
14350 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
14360 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 75  e>)^..<p>^The ou
14370 74 70 75 74 73 20 73 30 20 61 6e 64 20 73 31 20  tputs s0 and s1 
14380 61 72 65 20 62 6f 74 68 20 77 65 69 67 68 74 65  are both weighte
14390 64 20 63 68 65 63 6b 73 75 6d 73 20 75 73 69 6e  d checksums usin
143a0 67 20 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67  g Fibonacci weig
143b0 68 74 73 0a 69 6e 20 72 65 76 65 72 73 65 20 6f  hts.in reverse o
143c0 72 64 65 72 2e 20 20 28 5e 54 68 65 20 6c 61 72  rder.  (^The lar
143d0 67 65 73 74 20 46 69 62 6f 6e 61 63 63 69 20 77  gest Fibonacci w
143e0 65 69 67 68 74 20 6f 63 63 75 72 73 20 6f 6e 20  eight occurs on 
143f0 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
14400 74 0a 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63  t.of the sequenc
14410 65 20 62 65 69 6e 67 20 73 75 6d 6d 65 64 2e 29  e being summed.)
14420 20 20 5e 54 68 65 20 73 31 20 76 61 6c 75 65 20    ^The s1 value 
14430 73 70 61 6e 73 20 61 6c 6c 20 33 32 2d 62 69 74  spans all 32-bit
14440 20 69 6e 74 65 67 65 72 0a 74 65 72 6d 73 20 6f   integer.terms o
14450 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 77  f the sequence w
14460 68 65 72 65 61 73 20 73 30 20 6f 6d 69 74 73 20  hereas s0 omits 
14470 74 68 65 20 66 69 6e 61 6c 20 74 65 72 6d 2e 3c  the final term.<
14480 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 33 20 43 68 65  /p>..<h3>4.3 Che
14490 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74 68  ckpoint Algorith
144a0 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61  m</h3>..<p>^On a
144b0 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20 74   [checkpoint], t
144c0 68 65 20 57 41 4c 20 69 73 20 66 69 72 73 74 20  he WAL is first 
144d0 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69  flushed to persi
144e0 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73  stent storage us
144f0 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d 65  ing.the xSync me
14500 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71 6c  thod of the [sql
14510 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 20  ite3_io_methods 
14520 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20 76  | VFS]. .^Then v
14530 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20  alid content of 
14540 74 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e 73  the WAL is trans
14550 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65 20  ferred into the 
14560 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e  database file..^
14570 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61 74  Finally, the dat
14580 61 62 61 73 65 20 69 73 20 66 6c 75 73 68 65 64  abase is flushed
14590 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20 73   to persistent s
145a0 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e 6f  torage using ano
145b0 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68 6f  ther.xSync metho
145c0 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79 6e  d call..The xSyn
145d0 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65 72  c operations ser
145e0 76 65 20 61 73 20 77 72 69 74 65 20 62 61 72 72  ve as write barr
145f0 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74 65  iers - all write
14600 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f 72  s launched.befor
14610 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73 74  e the xSync must
14620 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72 65   complete before
14630 20 61 6e 79 20 77 72 69 74 65 20 74 68 61 74 20   any write that 
14640 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72 20 74  launches after t
14650 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73 2e  he.xSync begins.
14660 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20  </p>..<p>^After 
14670 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 2c  each checkpoint,
14680 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20   the WAL header 
14690 73 61 6c 74 2d 31 20 76 61 6c 75 65 20 69 73 20  salt-1 value is 
146a0 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 20  incremented and 
146b0 74 68 65 20 0a 73 61 6c 74 2d 32 20 76 61 6c 75  the .salt-2 valu
146c0 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64 2e  e is randomized.
146d0 20 20 54 68 69 73 20 70 72 65 76 65 6e 74 73 20    This prevents 
146e0 6f 6c 64 20 61 6e 64 20 6e 65 77 20 66 72 61 6d  old and new fram
146f0 65 73 20 69 6e 20 74 68 65 20 57 41 4c 20 66 72  es in the WAL fr
14700 6f 6d 0a 62 65 69 6e 67 20 63 6f 6e 73 69 64 65  om.being conside
14710 72 65 64 20 76 61 6c 69 64 20 61 74 20 74 68 65  red valid at the
14720 20 73 61 6d 65 20 74 69 6d 65 20 61 6e 64 20 62   same time and b
14730 65 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74 69  eing checkpointi
14740 6e 67 20 74 6f 67 65 74 68 65 72 0a 66 6f 6c 6c  ng together.foll
14750 6f 77 69 6e 67 20 61 20 63 72 61 73 68 2e 3c 2f  owing a crash.</
14760 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
14770 6d 65 6e 74 20 77 61 6c 72 65 61 64 20 7b 57 41  ment walread {WA
14780 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d  L read algorithm
14790 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 34 20  }</tcl>.<h3>4.4 
147a0 52 65 61 64 65 72 20 41 6c 67 6f 72 69 74 68 6d  Reader Algorithm
147b0 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72  </h3>..<p>^(To r
147c0 65 61 64 20 61 20 70 61 67 65 20 66 72 6f 6d 20  ead a page from 
147d0 74 68 65 20 64 61 74 61 62 61 73 65 20 28 63 61  the database (ca
147e0 6c 6c 20 69 74 20 70 61 67 65 20 6e 75 6d 62 65  ll it page numbe
147f0 72 20 50 29 2c 20 61 20 72 65 61 64 65 72 0a 66  r P), a reader.f
14800 69 72 73 74 20 63 68 65 63 6b 73 20 74 68 65 20  irst checks the 
14810 57 41 4c 20 74 6f 20 73 65 65 20 69 66 20 69 74  WAL to see if it
14820 20 63 6f 6e 74 61 69 6e 73 20 70 61 67 65 20 50   contains page P
14830 2e 20 20 49 66 20 73 6f 2c 20 74 68 65 6e 20 74  .  If so, then t
14840 68 65 0a 6c 61 73 74 20 76 61 6c 69 64 20 69 6e  he.last valid in
14850 73 74 61 6e 63 65 20 6f 66 20 70 61 67 65 20 50  stance of page P
14860 20 74 68 61 74 20 69 73 20 66 6f 6c 6c 6f 77 65   that is followe
14870 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72  d by a commit fr
14880 61 6d 65 0a 6f 72 20 69 73 20 61 20 63 6f 6d 6d  ame.or is a comm
14890 69 74 20 66 72 61 6d 65 20 69 74 73 65 6c 66 20  it frame itself 
148a0 62 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c 75  becomes the valu
148b0 65 20 72 65 61 64 2e 29 5e 20 20 5e 49 66 20 74  e read.)^  ^If t
148c0 68 65 20 57 41 4c 0a 63 6f 6e 74 61 69 6e 73 20  he WAL.contains 
148d0 6e 6f 20 63 6f 70 69 65 73 20 6f 66 20 70 61 67  no copies of pag
148e0 65 20 50 20 74 68 61 74 20 61 72 65 20 76 61 6c  e P that are val
148f0 69 64 20 61 6e 64 20 77 68 69 63 68 20 61 72 65  id and which are
14900 20 61 20 63 6f 6d 6d 69 74 0a 66 72 61 6d 65 20   a commit.frame 
14910 6f 72 20 61 72 65 20 66 6f 6c 6c 6f 77 65 64 20  or are followed 
14920 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d  by a commit fram
14930 65 2c 20 74 68 65 6e 20 70 61 67 65 20 50 20 69  e, then page P i
14940 73 20 72 65 61 64 20 66 72 6f 6d 0a 74 68 65 20  s read from.the 
14950 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f  database file.</
14960 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61 72 74 20  p>..<p>To start 
14970 61 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69  a read transacti
14980 6f 6e 2c 20 74 68 65 20 72 65 61 64 65 72 20 72  on, the reader r
14990 65 63 6f 72 64 73 20 74 68 65 20 69 6e 64 65 78  ecords the index
149a0 20 6f 66 20 74 68 65 20 6c 61 73 74 0a 76 61 6c   of the last.val
149b0 69 64 20 66 72 61 6d 65 20 69 6e 20 74 68 65 20  id frame in the 
149c0 57 41 4c 2e 20 20 54 68 65 20 72 65 61 64 65 72  WAL.  The reader
149d0 20 75 73 65 73 20 74 68 69 73 20 72 65 63 6f 72   uses this recor
149e0 64 65 64 20 22 6d 78 46 72 61 6d 65 22 20 76 61  ded "mxFrame" va
149f0 6c 75 65 0a 66 6f 72 20 61 6c 6c 20 73 75 62 73  lue.for all subs
14a00 65 71 75 65 6e 74 20 72 65 61 64 20 6f 70 65 72  equent read oper
14a10 61 74 69 6f 6e 73 2e 20 20 4e 65 77 20 74 72 61  ations.  New tra
14a20 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  nsactions can be
14a30 20 61 70 70 65 6e 64 65 64 0a 74 6f 20 74 68 65   appended.to the
14a40 20 57 41 4c 2c 20 62 75 74 20 61 73 20 6c 6f 6e   WAL, but as lon
14a50 67 20 61 73 20 74 68 65 20 72 65 61 64 65 72 20  g as the reader 
14a60 75 73 65 73 20 69 74 73 20 6f 72 69 67 69 6e 61  uses its origina
14a70 6c 20 6d 78 46 72 61 6d 65 20 76 61 6c 75 65 0a  l mxFrame value.
14a80 61 6e 64 20 69 67 6e 6f 72 65 73 20 73 75 62 73  and ignores subs
14a90 65 71 75 65 6e 74 6c 79 20 61 70 70 65 6e 64 65  equently appende
14aa0 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65 20 72  d content, the r
14ab0 65 61 64 65 72 20 77 69 6c 6c 20 73 65 65 20 61  eader will see a
14ac0 20 0a 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e 61   .consistent sna
14ad0 70 73 68 6f 74 20 6f 66 20 74 68 65 20 64 61 74  pshot of the dat
14ae0 61 62 61 73 65 20 66 72 6f 6d 20 61 20 73 69 6e  abase from a sin
14af0 67 6c 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d  gle point in tim
14b00 65 2e 20 20 0a 5e 54 68 69 73 20 74 65 63 68 6e  e.  .^This techn
14b10 69 71 75 65 20 61 6c 6c 6f 77 73 20 6d 75 6c 74  ique allows mult
14b20 69 70 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74 20  iple concurrent 
14b30 72 65 61 64 65 72 73 20 74 6f 20 76 69 65 77 20  readers to view 
14b40 64 69 66 66 65 72 65 6e 74 20 0a 76 65 72 73 69  different .versi
14b50 6f 6e 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  ons of the datab
14b60 61 73 65 20 63 6f 6e 74 65 6e 74 20 73 69 6d 75  ase content simu
14b70 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f 70 3e 0a  ltaneously.</p>.
14b80 0a 3c 70 3e 54 68 65 20 72 65 61 64 65 72 20 61  .<p>The reader a
14b90 6c 67 6f 72 69 74 68 6d 20 69 6e 20 74 68 65 20  lgorithm in the 
14ba0 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61  previous paragra
14bb0 70 68 73 20 77 6f 72 6b 73 20 63 6f 72 72 65 63  phs works correc
14bc0 74 6c 79 2c 20 62 75 74 20 0a 62 65 63 61 75 73  tly, but .becaus
14bd0 65 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67  e frames for pag
14be0 65 20 50 20 63 61 6e 20 61 70 70 65 61 72 20 61  e P can appear a
14bf0 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e 20 74  nywhere within t
14c00 68 65 20 57 41 4c 2c 20 74 68 65 0a 72 65 61 64  he WAL, the.read
14c10 65 72 20 68 61 73 20 74 6f 20 73 63 61 6e 20 74  er has to scan t
14c20 68 65 20 65 6e 74 69 72 65 20 57 41 4c 20 6c 6f  he entire WAL lo
14c30 6f 6b 69 6e 67 20 66 6f 72 20 70 61 67 65 20 50  oking for page P
14c40 20 66 72 61 6d 65 73 2e 20 20 49 66 20 74 68 65   frames.  If the
14c50 0a 57 41 4c 20 69 73 20 6c 61 72 67 65 20 28 6d  .WAL is large (m
14c60 75 6c 74 69 70 6c 65 20 6d 65 67 61 62 79 74 65  ultiple megabyte
14c70 73 20 69 73 20 74 79 70 69 63 61 6c 29 20 74 68  s is typical) th
14c80 61 74 20 73 63 61 6e 20 63 61 6e 20 62 65 20 73  at scan can be s
14c90 6c 6f 77 2c 0a 61 6e 64 20 72 65 61 64 20 70 65  low,.and read pe
14ca0 72 66 6f 72 6d 61 6e 63 65 20 73 75 66 66 65 72  rformance suffer
14cb0 73 2e 20 20 5e 54 6f 20 6f 76 65 72 63 6f 6d 65  s.  ^To overcome
14cc0 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20 61   this problem, a
14cd0 20 73 65 70 61 72 61 74 65 0a 64 61 74 61 20 73   separate.data s
14ce0 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20  tructure called 
14cf0 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  the wal-index is
14d00 20 6d 61 69 6e 74 61 69 6e 65 64 20 74 6f 20 65   maintained to e
14d10 78 70 65 64 69 74 65 20 74 68 65 0a 73 65 61 72  xpedite the.sear
14d20 63 68 20 66 6f 72 20 66 72 61 6d 65 73 20 6f 66  ch for frames of
14d30 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 61   a particular pa
14d40 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ge.</p>..<tcl>hd
14d50 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 69 6e 64  _fragment walind
14d60 65 78 66 6f 72 6d 61 74 20 7b 77 61 6c 2d 69 6e  exformat {wal-in
14d70 64 65 78 7d 20 7b 57 41 4c 2d 69 6e 64 65 78 20  dex} {WAL-index 
14d80 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
14d90 33 3e 34 2e 35 20 57 41 4c 2d 49 6e 64 65 78 20  3>4.5 WAL-Index 
14da0 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e  Format</h3>..<p>
14db0 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68  Conceptually, th
14dc0 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73  e wal-index is s
14dd0 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 74 68  hared memory, th
14de0 6f 75 67 68 20 74 68 65 20 63 75 72 72 65 6e 74  ough the current
14df0 0a 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74  .VFS implementat
14e00 69 6f 6e 73 20 75 73 65 20 61 20 6d 6d 61 70 70  ions use a mmapp
14e10 65 64 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20  ed file for the 
14e20 77 61 6c 2d 69 6e 64 65 78 2e 20 20 5e 54 68 65  wal-index.  ^The
14e30 20 6d 6d 61 70 70 65 64 0a 66 69 6c 65 20 69 73   mmapped.file is
14e40 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72   in the same dir
14e50 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
14e60 74 61 62 61 73 65 20 61 6e 64 20 68 61 73 20 74  tabase and has t
14e70 68 65 20 73 61 6d 65 20 6e 61 6d 65 0a 61 73 20  he same name.as 
14e80 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69 74  the database wit
14e90 68 20 61 20 22 3c 74 74 3e 2d 73 68 6d 3c 2f 74  h a "<tt>-shm</t
14ea0 74 3e 22 20 73 75 66 66 69 78 20 61 70 70 65 6e  t>" suffix appen
14eb0 64 65 64 2e 20 20 42 65 63 61 75 73 65 0a 74 68  ded.  Because.th
14ec0 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73  e wal-index is s
14ed0 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 53 51  hared memory, SQ
14ee0 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75  Lite does not su
14ef0 70 70 6f 72 74 20 0a 5b 50 52 41 47 4d 41 20 6a  pport .[PRAGMA j
14f00 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c 20 6a 6f  ournal_mode | jo
14f10 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 5d 20  urnal_mode=WAL] 
14f20 0a 6f 6e 20 61 20 6e 65 74 77 6f 72 6b 20 66 69  .on a network fi
14f30 6c 65 73 79 73 74 65 6d 20 77 68 65 6e 20 63 6c  lesystem when cl
14f40 69 65 6e 74 73 20 61 72 65 20 6f 6e 20 64 69 66  ients are on dif
14f50 66 65 72 65 6e 74 20 6d 61 63 68 69 6e 65 73 2e  ferent machines.
14f60 0a 41 6c 6c 20 75 73 65 72 73 20 6f 66 20 74 68  .All users of th
14f70 65 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20  e database must 
14f80 62 65 20 61 62 6c 65 20 74 6f 20 73 68 61 72 65  be able to share
14f90 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
14fa0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 70 75  .</p>..<p>The pu
14fb0 72 70 6f 73 65 20 6f 66 20 74 68 65 20 77 61 6c  rpose of the wal
14fc0 2d 69 6e 64 65 78 20 69 73 20 74 6f 20 61 6e 73  -index is to ans
14fd0 77 65 72 20 74 68 69 73 20 71 75 65 73 74 69 6f  wer this questio
14fe0 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a  n quickly:</p>..
14ff0 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a  <blockquote><i>.
15000 47 69 76 65 6e 20 61 20 70 61 67 65 20 6e 75 6d  Given a page num
15010 62 65 72 20 50 20 61 6e 64 20 61 20 6d 61 78 69  ber P and a maxi
15020 6d 75 6d 20 57 41 4c 20 66 72 61 6d 65 20 69 6e  mum WAL frame in
15030 64 65 78 20 4d 2c 0a 72 65 74 75 72 6e 20 74 68  dex M,.return th
15040 65 20 6c 61 72 67 65 73 74 20 57 41 4c 20 66 72  e largest WAL fr
15050 61 6d 65 20 69 6e 64 65 78 20 66 6f 72 20 70 61  ame index for pa
15060 67 65 20 50 20 74 68 61 74 20 64 6f 65 73 20 6e  ge P that does n
15070 6f 74 20 65 78 63 65 65 64 20 4d 2c 20 0a 6f 72  ot exceed M, .or
15080 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20   return NULL if 
15090 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 61  there are no fra
150a0 6d 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 74  mes for page P t
150b0 68 61 74 20 64 6f 20 6e 6f 74 20 65 78 63 65 65  hat do not excee
150c0 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b  d M..</i></block
150d0 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 3c  quote>..<p>The <
150e0 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65 20 69 6e  i>M</i> value in
150f0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61   the previous pa
15100 72 61 67 72 61 70 68 20 69 73 20 74 68 65 20 22  ragraph is the "
15110 6d 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 64  mxFrame" value.d
15120 65 66 69 6e 65 64 20 69 6e 20 5b 57 41 4c 20 72  efined in [WAL r
15130 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 20 7c 20  ead algorithm | 
15140 73 65 63 74 69 6f 6e 20 34 2e 34 5d 20 74 68 61  section 4.4] tha
15150 74 20 69 73 20 72 65 61 64 20 61 74 20 74 68 65  t is read at the
15160 20 73 74 61 72 74 20 0a 6f 66 20 61 20 74 72 61   start .of a tra
15170 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 68 69  nsaction and whi
15180 63 68 20 64 65 66 69 6e 65 73 20 74 68 65 20 6d  ch defines the m
15190 61 78 69 6d 75 6d 20 66 72 61 6d 65 20 66 72 6f  aximum frame fro
151a0 6d 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 0a  m the WAL that .
151b0 74 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20  the reader will 
151c0 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  use.</p>..<p>The
151d0 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72   wal-index is tr
151e0 61 6e 73 69 65 6e 74 2e 20 20 41 66 74 65 72 20  ansient.  After 
151f0 61 20 63 72 61 73 68 2c 20 74 68 65 20 77 61 6c  a crash, the wal
15200 2d 69 6e 64 65 78 20 69 73 0a 72 65 63 6f 6e 73  -index is.recons
15210 74 72 75 63 74 65 64 20 66 72 6f 6d 20 74 68 65  tructed from the
15220 20 6f 72 69 67 69 6e 61 6c 20 57 41 4c 20 66 69   original WAL fi
15230 6c 65 2e 20 20 5e 54 68 65 20 56 46 53 20 69 73  le.  ^The VFS is
15240 20 72 65 71 75 69 72 65 64 0a 74 6f 20 65 69 74   required.to eit
15250 68 65 72 20 74 72 75 6e 63 61 74 65 20 6f 72 20  her truncate or 
15260 7a 65 72 6f 20 74 68 65 20 68 65 61 64 65 72 20  zero the header 
15270 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
15280 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74 0a 63   when the last.c
15290 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 69 74 20  onnection to it 
152a0 63 6c 6f 73 65 73 2e 20 20 42 65 63 61 75 73 65  closes.  Because
152b0 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
152c0 73 20 74 72 61 6e 73 69 65 6e 74 2c 20 69 74 20  s transient, it 
152d0 63 61 6e 0a 75 73 65 20 61 6e 20 61 72 63 68 69  can.use an archi
152e0 74 65 63 74 75 72 65 2d 73 70 65 63 69 66 69 63  tecture-specific
152f0 20 66 6f 72 6d 61 74 3b 20 69 74 20 64 6f 65 73   format; it does
15300 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20   not have to be 
15310 63 72 6f 73 73 2d 70 6c 61 74 66 6f 72 6d 2e 0a  cross-platform..
15320 48 65 6e 63 65 2c 20 75 6e 6c 69 6b 65 20 74 68  Hence, unlike th
15330 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 57  e database and W
15340 41 4c 20 66 69 6c 65 20 66 6f 72 6d 61 74 73 20  AL file formats 
15350 77 68 69 63 68 20 73 74 6f 72 65 20 61 6c 6c 20  which store all 
15360 76 61 6c 75 65 73 0a 61 73 20 62 69 67 20 65 6e  values.as big en
15370 64 69 61 6e 2c 20 74 68 65 20 77 61 6c 2d 69 6e  dian, the wal-in
15380 64 65 78 20 73 74 6f 72 65 73 20 6d 75 6c 74 69  dex stores multi
15390 2d 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20  -byte values in 
153a0 74 68 65 20 6e 61 74 69 76 65 0a 62 79 74 65 20  the native.byte 
153b0 6f 72 64 65 72 20 6f 66 20 74 68 65 20 68 6f 73  order of the hos
153c0 74 20 63 6f 6d 70 75 74 65 72 2e 3c 2f 70 3e 0a  t computer.</p>.
153d0 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e  .<p>This documen
153e0 74 20 69 73 20 63 6f 6e 63 65 72 6e 65 64 20 77  t is concerned w
153f0 69 74 68 20 74 68 65 20 70 65 72 73 69 73 74 65  ith the persiste
15400 6e 74 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  nt state of the 
15410 64 61 74 61 62 61 73 65 0a 66 69 6c 65 2c 20 61  database.file, a
15420 6e 64 20 73 69 6e 63 65 20 74 68 65 20 77 61 6c  nd since the wal
15430 2d 69 6e 64 65 78 20 69 73 20 61 20 74 72 61 6e  -index is a tran
15440 73 69 65 6e 74 20 73 74 72 75 63 74 75 72 65 2c  sient structure,
15450 20 6e 6f 20 66 75 72 74 68 65 72 20 0a 69 6e 66   no further .inf
15460 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
15470 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
15480 20 77 61 6c 2d 69 6e 64 65 78 20 77 69 6c 6c 20   wal-index will 
15490 62 65 20 70 72 6f 76 69 64 65 64 20 68 65 72 65  be provided here
154a0 2e 0a 43 6f 6d 70 6c 65 74 65 20 64 65 74 61 69  ..Complete detai
154b0 6c 73 20 6f 6e 20 74 68 65 20 66 6f 72 6d 61 74  ls on the format
154c0 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65   of the wal-inde
154d0 78 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  x are contained 
154e0 77 69 74 68 69 6e 0a 63 6f 6d 6d 65 6e 74 73 20  within.comments 
154f0 69 6e 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  in SQLite source
15500 20 63 6f 64 65 2e 3c 2f 70 3e 0a                  code.</p>.