Documentation Source Text

Hex Artifact Content
Login

Artifact 4b1b22cd0092a229dc2029aa90f73a91b3d05952:


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 5e 57 68  ase schema.  ^Wh
3350: 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
3360: 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
3370: 65 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  es, the statemen
3380: 74 0a 6d 75 73 74 20 62 65 20 72 65 70 72 65 70  t.must be reprep
3390: 61 72 65 64 2e 20 20 5e 57 68 65 6e 65 76 65 72  ared.  ^Whenever
33a0: 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
33b0: 65 6d 65 6e 74 20 72 75 6e 73 2c 20 69 74 20 66  ement runs, it f
33c0: 69 72 73 74 20 63 68 65 63 6b 73 0a 74 68 65 20  irst checks.the 
33d0: 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 74 6f  schema cookie to
33e0: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 76   make sure the v
33f0: 61 6c 75 65 20 69 73 20 74 68 65 20 73 61 6d 65  alue is the same
3400: 20 61 73 20 77 68 65 6e 20 74 68 65 20 73 74 61   as when the sta
3410: 74 65 6d 65 6e 74 0a 77 61 73 20 70 72 65 70 61  tement.was prepa
3420: 72 65 64 20 61 6e 64 20 69 66 20 74 68 65 20 73  red and if the s
3430: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 68 61 73  chema cookie has
3440: 20 63 68 61 6e 67 65 64 2c 20 74 68 65 20 73 74   changed, the st
3450: 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 0a 69  atement aborts.i
3460: 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 65  n order to force
3470: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
3480: 6f 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  o be reprepared.
3490: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
34a0: 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d 61 66 6f  agment {schemafo
34b0: 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61 20 66 6f  rmat} {schema fo
34c0: 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61 20 66 6f  rmat} {schema fo
34d0: 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c 2f 74 63  rmat number}</tc
34e0: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 30 20 53 63  l>.<h4>1.2.10 Sc
34f0: 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62  hema format numb
3500: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  er</h4>..<p>The 
3510: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
3520: 6d 62 65 72 20 69 73 20 61 20 34 2d 62 79 74 65  mber is a 4-byte
3530: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
3540: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 34  ger at offset 44
3550: 2e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  ..The schema for
3560: 6d 61 74 20 6e 75 6d 62 65 72 20 69 73 20 73 69  mat number is si
3570: 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 66 69 6c  milar to the fil
3580: 65 20 66 6f 72 6d 61 74 20 72 65 61 64 20 61 6e  e format read an
3590: 64 20 77 72 69 74 65 0a 76 65 72 73 69 6f 6e 20  d write.version 
35a0: 6e 75 6d 62 65 72 73 20 61 74 20 6f 66 66 73 65  numbers at offse
35b0: 74 73 20 31 38 20 61 6e 64 20 31 39 20 65 78 63  ts 18 and 19 exc
35c0: 65 70 74 20 74 68 61 74 20 74 68 65 20 73 63 68  ept that the sch
35d0: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
35e0: 72 0a 72 65 66 65 72 73 20 74 6f 20 74 68 65 20  r.refers to the 
35f0: 68 69 67 68 2d 6c 65 76 65 6c 20 53 51 4c 20 66  high-level SQL f
3600: 6f 72 6d 61 74 74 69 6e 67 20 72 61 74 68 65 72  ormatting rather
3610: 20 74 68 61 6e 20 74 68 65 20 6c 6f 77 2d 6c 65   than the low-le
3620: 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f 72 6d 61  vel b-tree.forma
3630: 74 74 69 6e 67 2e 20 20 46 6f 75 72 20 73 63 68  tting.  Four sch
3640: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
3650: 72 73 20 61 72 65 20 63 75 72 72 65 6e 74 6c 79  rs are currently
3660: 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e 0a 0a 3c   defined:</p>..<
3670: 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 31 3e  ol>.<li value=1>
3680: 46 6f 72 6d 61 74 20 31 20 69 73 20 75 6e 64 65  Format 1 is unde
3690: 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c 20 76 65  rstood by all ve
36a0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
36b0: 20 62 61 63 6b 20 74 6f 0a 76 65 72 73 69 6f 6e   back to.version
36c0: 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e 0a 3c 6c 69   3.0.0.</li>.<li
36d0: 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d 61 74 20   value=2>Format 
36e0: 32 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69  2 adds the abili
36f0: 74 79 20 6f 66 20 72 6f 77 73 20 77 69 74 68 69  ty of rows withi
3700: 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  n the same table
3710: 0a 74 6f 20 68 61 76 65 20 61 20 76 61 72 79 69  .to have a varyi
3720: 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ng number of col
3730: 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65 72 20 74  umns, in order t
3740: 6f 20 73 75 70 70 6f 72 74 20 74 68 65 0a 5b 41  o support the.[A
3750: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
3760: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
3770: 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63 74 69 6f   COLUMN] functio
3780: 6e 61 6c 69 74 79 2e 20 20 53 75 70 70 6f 72 74  nality.  Support
3790: 20 66 6f 72 0a 72 65 61 64 69 6e 67 20 61 6e 64   for.reading and
37a0: 20 77 72 69 74 69 6e 67 20 66 6f 72 6d 61 74 20   writing format 
37b0: 32 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53  2 was added in S
37c0: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
37d0: 31 2e 33 20 0a 6f 6e 20 32 30 30 35 2d 30 32 2d  1.3 .on 2005-02-
37e0: 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c  19.</li>.<li val
37f0: 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33 20 61 64  ue=3>Format 3 ad
3800: 64 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f  ds the ability o
3810: 66 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20  f extra columns 
3820: 61 64 64 65 64 20 62 79 0a 5b 41 4c 54 45 52 20  added by.[ALTER 
3830: 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54 41  TABLE | ALTER TA
3840: 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c 55  BLE ... ADD COLU
3850: 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e 6f 6e 2d  MN] to have non-
3860: 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a 76 61 6c  NULL default.val
3870: 75 65 73 2e 20 20 54 68 69 73 20 63 61 70 61 62  ues.  This capab
3880: 69 6c 69 74 79 20 77 61 73 20 61 64 64 65 64 20  ility was added 
3890: 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  in SQLite versio
38a0: 6e 20 33 2e 31 2e 34 20 0a 6f 6e 20 32 30 30 35  n 3.1.4 .on 2005
38b0: 2d 30 33 2d 31 31 2e 3c 2f 6c 69 3e 0a 3c 6c 69  -03-11.</li>.<li
38c0: 20 76 61 6c 75 65 3d 34 3e 5e 46 6f 72 6d 61 74   value=4>^Format
38d0: 20 34 20 63 61 75 73 65 73 20 53 51 4c 69 74 65   4 causes SQLite
38e0: 20 74 6f 20 72 65 73 70 65 63 74 20 74 68 65 0a   to respect the.
38f0: 5b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 65  [descending inde
3900: 78 65 73 20 7c 20 44 45 53 43 20 6b 65 79 77 6f  xes | DESC keywo
3910: 72 64 5d 20 6f 6e 0a 69 6e 64 65 78 20 64 65 63  rd] on.index dec
3920: 6c 61 72 61 74 69 6f 6e 73 2e 20 20 28 5e 54 68  larations.  (^Th
3930: 65 20 44 45 53 43 20 6b 65 79 77 6f 72 64 20 69  e DESC keyword i
3940: 73 20 69 67 6e 6f 72 65 64 20 69 6e 20 69 6e 64  s ignored in ind
3950: 65 78 65 73 20 66 6f 72 20 0a 66 6f 72 6d 61 74  exes for .format
3960: 73 20 31 2c 20 32 2c 20 61 6e 64 20 33 2e 29 0a  s 1, 2, and 3.).
3970: 5e 46 6f 72 6d 61 74 20 34 20 61 6c 73 6f 20 61  ^Format 4 also a
3980: 64 64 73 20 74 77 6f 20 6e 65 77 20 62 6f 6f 6c  dds two new bool
3990: 65 61 6e 20 72 65 63 6f 72 64 20 74 79 70 65 20  ean record type 
39a0: 76 61 6c 75 65 73 20 28 5b 73 65 72 69 61 6c 20  values ([serial 
39b0: 74 79 70 65 73 5d 0a 38 20 61 6e 64 20 39 29 2e  types].8 and 9).
39c0: 20 20 53 75 70 70 6f 72 74 20 66 6f 72 20 66 6f    Support for fo
39d0: 72 6d 61 74 20 34 20 77 61 73 20 61 64 64 65 64  rmat 4 was added
39e0: 20 69 6e 20 53 51 4c 69 74 65 20 33 2e 33 2e 30   in SQLite 3.3.0
39f0: 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31 30 2e 3c   on.2006-01-10.<
3a00: 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  /li>.</ol>..<p>^
3a10: 4e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  New database fil
3a20: 65 73 20 63 72 65 61 74 65 64 20 62 79 20 53 51  es created by SQ
3a30: 4c 69 74 65 20 75 73 65 20 66 6f 72 6d 61 74 20  Lite use format 
3a40: 34 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 5e 54  4 by default..^T
3a50: 68 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f  he [legacy_file_
3a60: 66 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63  format pragma] c
3a70: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 61  an be used to ca
3a80: 75 73 65 20 53 51 4c 69 74 65 0a 74 6f 20 63 72  use SQLite.to cr
3a90: 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73  eate new databas
3aa0: 65 20 66 69 6c 65 73 20 75 73 69 6e 67 20 66 6f  e files using fo
3ab0: 72 6d 61 74 20 31 2e 0a 54 68 65 20 66 6f 72 6d  rmat 1..The form
3ac0: 61 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  at version numbe
3ad0: 72 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  r can be made to
3ae0: 20 64 65 66 61 75 6c 74 20 74 6f 20 31 20 69 6e   default to 1 in
3af0: 73 74 65 61 64 20 6f 66 20 34 20 62 79 0a 73 65  stead of 4 by.se
3b00: 74 74 69 6e 67 20 5b 53 51 4c 49 54 45 5f 44 45  tting [SQLITE_DE
3b10: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
3b20: 54 5d 3d 31 20 61 74 20 63 6f 6d 70 69 6c 65 2d  T]=1 at compile-
3b30: 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 34 3e  time..</p>..<h4>
3b40: 31 2e 32 2e 31 31 20 53 75 67 67 65 73 74 65 64  1.2.11 Suggested
3b50: 20 63 61 63 68 65 20 73 69 7a 65 3c 2f 68 34 3e   cache size</h4>
3b60: 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20  ..<p>The 4-byte 
3b70: 62 69 67 2d 65 6e 64 69 61 6e 20 73 69 67 6e 65  big-endian signe
3b80: 64 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  d integer at off
3b90: 73 65 74 20 34 38 20 69 73 20 74 68 65 20 73 75  set 48 is the su
3ba0: 67 67 65 73 74 65 64 0a 63 61 63 68 65 20 73 69  ggested.cache si
3bb0: 7a 65 20 69 6e 20 70 61 67 65 73 20 66 6f 72 20  ze in pages for 
3bc0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3bd0: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  e.  The value is
3be0: 20 61 20 73 75 67 67 65 73 74 69 6f 6e 0a 6f 6e   a suggestion.on
3bf0: 6c 79 20 61 6e 64 20 53 51 4c 69 74 65 20 69 73  ly and SQLite is
3c00: 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c 69 67 61   under no obliga
3c10: 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72 20 69 74  tion to honor it
3c20: 2e 20 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20  .  The absolute 
3c30: 76 61 6c 75 65 0a 6f 66 20 74 68 65 20 69 6e 74  value.of the int
3c40: 65 67 65 72 20 69 73 20 75 73 65 64 20 61 73 20  eger is used as 
3c50: 74 68 65 20 73 75 67 67 65 73 74 65 64 20 73 69  the suggested si
3c60: 7a 65 2e 20 20 54 68 65 20 73 75 67 67 65 73 74  ze.  The suggest
3c70: 65 64 20 63 61 63 68 65 20 73 69 7a 65 0a 63 61  ed cache size.ca
3c80: 6e 20 62 65 20 73 65 74 20 75 73 69 6e 67 20 74  n be set using t
3c90: 68 65 20 5b 64 65 66 61 75 6c 74 5f 63 61 63 68  he [default_cach
3ca0: 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 5d 2e 3c  e_size pragma].<
3cb0: 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 32 20  /p>..<h4>1.2.12 
3cc0: 49 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  Incremental vacu
3cd0: 75 6d 20 73 65 74 74 69 6e 67 73 3c 2f 68 34 3e  um settings</h4>
3ce0: 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 20 34 2d 62  ..<p>The two 4-b
3cf0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3d00: 6e 74 65 67 65 72 73 20 61 74 20 6f 66 66 73 65  ntegers at offse
3d10: 74 73 20 35 32 20 61 6e 64 20 36 34 20 61 72 65  ts 52 and 64 are
3d20: 20 75 73 65 64 0a 74 6f 20 6d 61 6e 61 67 65 20   used.to manage 
3d30: 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  the [auto_vacuum
3d40: 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74  ] and [increment
3d50: 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73  al_vacuum] modes
3d60: 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e 74 65 67  .  ^If.the integ
3d70: 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20  er at offset 52 
3d80: 69 73 20 7a 65 72 6f 20 74 68 65 6e 20 70 6f 69  is zero then poi
3d90: 6e 74 65 72 2d 6d 61 70 20 28 70 74 72 6d 61 70  nter-map (ptrmap
3da0: 29 20 70 61 67 65 73 20 61 72 65 0a 6f 6d 69 74  ) pages are.omit
3db0: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
3dc0: 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 6e  abase file and n
3dd0: 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61 63 75  either auto_vacu
3de0: 75 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d 65 6e 74  um nor.increment
3df0: 61 6c 5f 76 61 63 75 75 6d 20 61 72 65 20 73 75  al_vacuum are su
3e00: 70 70 6f 72 74 65 64 2e 20 20 5e 49 66 20 74 68  pported.  ^If th
3e10: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
3e20: 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e 2d 7a 65  set 52 is.non-ze
3e30: 72 6f 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  ro then it is th
3e40: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
3e50: 20 74 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f   the largest roo
3e60: 74 20 70 61 67 65 20 69 6e 20 74 68 65 0a 64 61  t page in the.da
3e70: 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65  tabase file, the
3e80: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
3e90: 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 70 74 72 6d  ill contain ptrm
3ea0: 61 70 20 70 61 67 65 73 2c 20 61 6e 64 20 74 68  ap pages, and th
3eb0: 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62 65 20 65  e.mode must be e
3ec0: 69 74 68 65 72 20 61 75 74 6f 5f 76 61 63 75 75  ither auto_vacuu
3ed0: 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c  m or incremental
3ee0: 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e 20 74 68  _vacuum.  ^In th
3ef0: 69 73 20 6c 61 74 74 65 72 0a 63 61 73 65 2c 20  is latter.case, 
3f00: 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
3f10: 66 66 73 65 74 20 36 34 20 69 73 20 74 72 75 65  ffset 64 is true
3f20: 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c   for incremental
3f30: 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66 61 6c 73  _vacuum and.fals
3f40: 65 20 66 6f 72 20 61 75 74 6f 5f 76 61 63 75 75  e for auto_vacuu
3f50: 6d 2e 20 20 5e 49 66 20 74 68 65 20 69 6e 74 65  m.  ^If the inte
3f60: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 32  ger at offset 52
3f70: 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 0a 74 68   is zero then.th
3f80: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
3f90: 73 65 74 20 36 34 20 6d 75 73 74 20 61 6c 73 6f  set 64 must also
3fa0: 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c   be zero.</p>..<
3fb0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
3fc0: 65 6e 63 20 7b 74 65 78 74 20 65 6e 63 6f 64 69  enc {text encodi
3fd0: 6e 67 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e  ng}</tcl>.<h4>1.
3fe0: 32 2e 31 33 20 54 65 78 74 20 65 6e 63 6f 64 69  2.13 Text encodi
3ff0: 6e 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  ng</h4>..<p>^The
4000: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4010: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4020: 66 73 65 74 20 35 36 20 64 65 74 65 72 6d 69 6e  fset 56 determin
4030: 65 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 0a  es the encoding.
4040: 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 74 65 78  used for all tex
4050: 74 20 73 74 72 69 6e 67 73 20 73 74 6f 72 65 64  t strings stored
4060: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
4070: 2e 20 20 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20  .  .^A value of 
4080: 31 20 6d 65 61 6e 73 20 55 54 46 2d 38 2e 0a 5e  1 means UTF-8..^
4090: 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65 61  A value of 2 mea
40a0: 6e 73 20 55 54 46 2d 31 36 6c 65 2e 0a 5e 41 20  ns UTF-16le..^A 
40b0: 76 61 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e 73  value of 3 means
40c0: 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f 20 6f 74   UTF-16be..No ot
40d0: 68 65 72 20 76 61 6c 75 65 73 20 61 72 65 20 61  her values are a
40e0: 6c 6c 6f 77 65 64 2e 0a 5e 54 68 65 20 73 71 6c  llowed..^The sql
40f0: 69 74 65 33 2e 68 20 68 65 61 64 65 72 20 66 69  ite3.h header fi
4100: 6c 65 20 64 65 66 69 6e 65 73 20 43 2d 70 72 65  le defines C-pre
4110: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73  processor macros
4120: 20 53 51 4c 49 54 45 5f 55 54 46 38 20 61 73 20   SQLITE_UTF8 as 
4130: 31 2c 0a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  1,.SQLITE_UTF16L
4140: 45 20 61 73 20 32 2c 20 61 6e 64 20 53 51 4c 49  E as 2, and SQLI
4150: 54 45 5f 55 54 46 31 36 42 45 20 61 73 20 33 2c  TE_UTF16BE as 3,
4160: 20 74 6f 20 75 73 65 20 69 6e 20 70 6c 61 63 65   to use in place
4170: 20 6f 66 0a 74 68 65 20 6e 75 6d 65 72 69 63 20   of.the numeric 
4180: 63 6f 64 65 73 20 66 6f 72 20 74 68 65 20 74 65  codes for the te
4190: 78 74 20 65 6e 63 6f 64 69 6e 67 2e 3c 2f 70 3e  xt encoding.</p>
41a0: 0a 0a 3c 68 34 3e 31 2e 32 2e 31 34 20 55 73 65  ..<h4>1.2.14 Use
41b0: 72 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  r version number
41c0: 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34  </h4>..<p>^The 4
41d0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
41e0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
41f0: 65 74 20 36 30 20 69 73 20 74 68 65 20 75 73 65  et 60 is the use
4200: 72 20 76 65 72 73 69 6f 6e 20 77 68 69 63 68 0a  r version which.
4210: 69 73 20 73 65 74 20 61 6e 64 20 71 75 65 72 69  is set and queri
4220: 65 64 20 62 79 20 74 68 65 20 5b 75 73 65 72 5f  ed by the [user_
4230: 76 65 72 73 69 6f 6e 20 70 72 61 67 6d 61 5d 2e  version pragma].
4240: 20 20 54 68 65 20 75 73 65 72 20 76 65 72 73 69    The user versi
4250: 6f 6e 20 69 73 0a 6e 6f 74 20 75 73 65 64 20 62  on is.not used b
4260: 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c  y SQLite.</p>..<
4270: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
4280: 61 70 70 69 64 20 7b 41 70 70 6c 69 63 61 74 69  appid {Applicati
4290: 6f 6e 20 49 44 7d 3c 2f 74 63 6c 3e 0a 3c 68 34  on ID}</tcl>.<h4
42a0: 3e 31 2e 32 2e 31 35 20 41 70 70 6c 69 63 61 74  >1.2.15 Applicat
42b0: 69 6f 6e 20 49 44 3c 2f 68 34 3e 0a 0a 3c 70 3e  ion ID</h4>..<p>
42c0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
42d0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
42e0: 74 20 6f 66 66 73 65 74 20 36 38 20 69 73 20 61  t offset 68 is a
42f0: 6e 20 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49  n "Application I
4300: 44 22 20 74 68 61 74 0a 63 61 6e 20 62 65 20 73  D" that.can be s
4310: 65 74 20 62 79 20 74 68 65 20 5b 50 52 41 47 4d  et by the [PRAGM
4320: 41 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  A application_id
4330: 5d 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72 64  ] command in ord
4340: 65 72 20 74 6f 20 69 64 65 6e 74 69 66 79 20 74  er to identify t
4350: 68 65 0a 64 61 74 61 62 61 73 65 20 61 73 20 62  he.database as b
4360: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 6f 72 20 61  elonging to or a
4370: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
4380: 20 70 61 72 74 69 63 75 6c 61 72 20 61 70 70 6c   particular appl
4390: 69 63 61 74 69 6f 6e 2e 0a 54 68 65 20 61 70 70  ication..The app
43a0: 6c 69 63 61 74 69 6f 6e 20 49 44 20 69 73 20 69  lication ID is i
43b0: 6e 74 65 6e 64 65 64 20 66 6f 72 20 64 61 74 61  ntended for data
43c0: 62 61 73 65 20 66 69 6c 65 73 20 75 73 65 64 20  base files used 
43d0: 61 73 20 61 6e 0a 5b 61 70 70 6c 69 63 61 74 69  as an.[applicati
43e0: 6f 6e 20 66 69 6c 65 2d 66 6f 72 6d 61 74 5d 2e  on file-format].
43f0: 20 20 54 68 65 20 61 70 70 6c 69 63 61 74 69 6f    The applicatio
4400: 6e 20 49 44 20 63 61 6e 20 62 65 20 75 73 65 64  n ID can be used
4410: 20 62 79 20 75 74 69 6c 69 74 69 65 73 20 0a 73   by utilities .s
4420: 75 63 68 20 61 73 20 5b 68 74 74 70 3a 2f 2f 77  uch as [http://w
4430: 77 77 2e 64 61 72 77 69 6e 73 79 73 2e 63 6f 6d  ww.darwinsys.com
4440: 2f 66 69 6c 65 2f 20 7c 20 66 69 6c 65 28 31 29  /file/ | file(1)
4450: 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  ] to determine t
4460: 68 65 20 73 70 65 63 69 66 69 63 0a 66 69 6c 65  he specific.file
4470: 20 74 79 70 65 20 72 61 74 68 65 72 20 74 68 61   type rather tha
4480: 6e 20 6a 75 73 74 20 72 65 70 6f 72 74 69 6e 67  n just reporting
4490: 20 22 53 51 4c 69 74 65 33 20 44 61 74 61 62 61   "SQLite3 Databa
44a0: 73 65 22 2e 20 20 41 20 6c 69 73 74 20 6f 66 0a  se".  A list of.
44b0: 61 73 73 69 67 6e 65 64 20 61 70 70 6c 69 63 61  assigned applica
44c0: 74 69 6f 6e 20 49 44 73 20 63 61 6e 20 62 65 20  tion IDs can be 
44d0: 73 65 65 6e 20 62 79 20 63 6f 6e 73 75 6c 74 69  seen by consulti
44e0: 6e 67 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f 77  ng the.[http://w
44f0: 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72  ww.sqlite.org/sr
4500: 63 2f 61 72 74 69 66 61 63 74 3f 63 69 3d 74 72  c/artifact?ci=tr
4510: 75 6e 6b 26 66 69 6c 65 6e 61 6d 65 3d 6d 61 67  unk&filename=mag
4520: 69 63 2e 74 78 74 7c 6d 61 67 69 63 2e 74 78 74  ic.txt|magic.txt
4530: 5d 0a 66 69 6c 65 20 69 6e 20 74 68 65 20 53 51  ].file in the SQ
4540: 4c 69 74 65 20 73 6f 75 72 63 65 20 72 65 70 6f  Lite source repo
4550: 73 69 74 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 74 63  sitory.</p>..<tc
4560: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61  l>hd_fragment va
4570: 6c 69 64 66 6f 72 20 7b 76 65 72 73 69 6f 6e 2d  lidfor {version-
4580: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
4590: 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e  }</tcl>.<h4>1.2.
45a0: 31 36 20 57 72 69 74 65 20 6c 69 62 72 61 72 79  16 Write library
45b0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
45c0: 61 6e 64 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69  and version-vali
45d0: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 3c 2f 68 34  d-for number</h4
45e0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
45f0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
4600: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 39  eger at offset 9
4610: 36 20 73 74 6f 72 65 73 20 74 68 65 20 0a 5b 53  6 stores the .[S
4620: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55  QLITE_VERSION_NU
4630: 4d 42 45 52 5d 20 76 61 6c 75 65 20 66 6f 72 20  MBER] value for 
4640: 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  the SQLite libra
4650: 72 79 20 74 68 61 74 20 6d 6f 73 74 0a 72 65 63  ry that most.rec
4660: 65 6e 74 6c 79 20 6d 6f 64 69 66 69 65 64 20 74  ently modified t
4670: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4680: 2e 20 20 5e 54 68 65 20 34 2d 62 79 74 65 20 62  .  ^The 4-byte b
4690: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
46a0: 72 20 61 74 0a 6f 66 66 73 65 74 20 39 32 20 69  r at.offset 92 i
46b0: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
46c0: 68 65 20 5b 63 68 61 6e 67 65 20 63 6f 75 6e 74  he [change count
46d0: 65 72 5d 20 77 68 65 6e 20 74 68 65 20 76 65 72  er] when the ver
46e0: 73 69 6f 6e 20 6e 75 6d 62 65 72 0a 77 61 73 20  sion number.was 
46f0: 73 74 6f 72 65 64 2e 20 20 54 68 65 20 69 6e 74  stored.  The int
4700: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 39  eger at offset 9
4710: 32 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 63  2 indicates whic
4720: 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 74 68  h transaction.th
4730: 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
4740: 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20 61 6e   is valid for an
4750: 64 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 63  d is sometimes c
4760: 61 6c 6c 65 64 20 74 68 65 0a 22 76 65 72 73 69  alled the."versi
4770: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
4780: 62 65 72 22 2e 0a 0a 3c 68 34 3e 31 2e 32 2e 31  ber"...<h4>1.2.1
4790: 36 20 48 65 61 64 65 72 20 73 70 61 63 65 20 72  6 Header space r
47a0: 65 73 65 72 76 65 64 20 66 6f 72 20 65 78 70 61  eserved for expa
47b0: 6e 73 69 6f 6e 3c 2f 68 34 3e 0a 0a 3c 70 3e 41  nsion</h4>..<p>A
47c0: 6c 6c 20 6f 74 68 65 72 20 62 79 74 65 73 20 6f  ll other bytes o
47d0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
47e0: 69 6c 65 20 68 65 61 64 65 72 20 61 72 65 20 72  ile header are r
47f0: 65 73 65 72 76 65 64 20 66 6f 72 0a 66 75 74 75  eserved for.futu
4800: 72 65 20 65 78 70 61 6e 73 69 6f 6e 20 61 6e 64  re expansion and
4810: 20 6d 75 73 74 20 62 65 20 73 65 74 20 74 6f 20   must be set to 
4820: 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31  zero.</p>..<h3>1
4830: 2e 33 20 54 68 65 20 4c 6f 63 6b 2d 42 79 74 65  .3 The Lock-Byte
4840: 20 50 61 67 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54   Page</h3>..<p>T
4850: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
4860: 65 20 69 73 20 74 68 65 20 73 69 6e 67 6c 65 20  e is the single 
4870: 70 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61  page of the data
4880: 62 61 73 65 20 66 69 6c 65 0a 74 68 61 74 20 63  base file.that c
4890: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 79 74 65  ontains the byte
48a0: 73 20 61 74 20 6f 66 66 73 65 74 73 20 62 65 74  s at offsets bet
48b0: 77 65 65 6e 20 31 30 37 33 37 34 31 38 32 34 20  ween 1073741824 
48c0: 61 6e 64 20 31 30 37 33 37 34 32 33 33 35 2c 0a  and 1073742335,.
48d0: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 20 64 61  inclusive.  A da
48e0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 68 61 74  tabase file that
48f0: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
4900: 20 65 71 75 61 6c 20 74 6f 20 31 30 37 33 37 34   equal to 107374
4910: 31 38 32 34 20 62 79 74 65 73 20 0a 69 6e 20 73  1824 bytes .in s
4920: 69 7a 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ize contains no 
4930: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2e 20  lock-byte page. 
4940: 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   A database file
4950: 20 6c 61 72 67 65 72 20 74 68 61 6e 0a 31 30 37   larger than.107
4960: 33 37 34 31 38 32 34 20 63 6f 6e 74 61 69 6e 73  3741824 contains
4970: 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 6c 6f 63   exactly one loc
4980: 6b 2d 62 79 74 65 20 70 61 67 65 2e 0a 3c 2f 70  k-byte page..</p
4990: 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62  >..<p>The lock-b
49a0: 79 74 65 20 70 61 67 65 20 69 73 20 73 65 74 20  yte page is set 
49b0: 61 73 69 64 65 20 66 6f 72 20 75 73 65 20 62 79  aside for use by
49c0: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 2d 73   the operating-s
49d0: 79 73 74 65 6d 20 73 70 65 63 69 66 69 63 0a 5b  ystem specific.[
49e0: 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61 74  VFS] implementat
49f0: 69 6f 6e 20 69 6e 20 69 6d 70 6c 65 6d 65 6e 74  ion in implement
4a00: 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
4a10: 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 20 70 72   file locking pr
4a20: 69 6d 69 74 69 76 65 73 2e 0a 5e 53 51 4c 69 74  imitives..^SQLit
4a30: 65 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 20 74  e does not use t
4a40: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
4a50: 65 2e 20 20 5e 54 68 65 20 53 51 4c 69 74 65 20  e.  ^The SQLite 
4a60: 63 6f 72 65 20 0a 77 69 6c 6c 20 6e 65 76 65 72  core .will never
4a70: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 74   read or write t
4a80: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
4a90: 65 2c 0a 74 68 6f 75 67 68 20 6f 70 65 72 61 74  e,.though operat
4aa0: 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69  ing-system speci
4ab0: 66 69 63 20 5b 56 46 53 5d 20 0a 69 6d 70 6c 65  fic [VFS] .imple
4ac0: 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 61 79 20 63  mentations may c
4ad0: 68 6f 6f 73 65 20 74 6f 20 72 65 61 64 20 6f 72  hoose to read or
4ae0: 20 77 72 69 74 65 20 62 79 74 65 73 20 6f 6e 20   write bytes on 
4af0: 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 0a 70  the lock-byte .p
4b00: 61 67 65 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  age according to
4b10: 20 74 68 65 20 0a 6e 65 65 64 73 20 61 6e 64 20   the .needs and 
4b20: 70 72 6f 63 6c 69 76 69 74 69 65 73 20 6f 66 20  proclivities of 
4b30: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 73  the underlying s
4b40: 79 73 74 65 6d 2e 20 20 54 68 65 20 75 6e 69 78  ystem.  The unix
4b50: 20 61 6e 64 20 77 69 6e 33 32 0a 5b 56 46 53 5d   and win32.[VFS]
4b60: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
4b70: 20 74 68 61 74 20 63 6f 6d 65 20 62 75 69 6c 74   that come built
4b80: 20 69 6e 74 6f 20 53 51 4c 69 74 65 20 64 6f 20   into SQLite do 
4b90: 6e 6f 74 20 77 72 69 74 65 20 74 6f 20 74 68 65  not write to the
4ba0: 0a 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2c  .lock-byte page,
4bb0: 20 62 75 74 20 74 68 69 72 64 2d 70 61 72 74 79   but third-party
4bc0: 20 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74   VFS implementat
4bd0: 69 6f 6e 73 20 66 6f 72 0a 6f 74 68 65 72 20 6f  ions for.other o
4be0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73  perating systems
4bf0: 20 6d 69 67 68 74 2e 3c 2f 70 3e 0a 0a 3c 74 63   might.</p>..<tc
4c00: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 66  l>hd_fragment {f
4c10: 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 6c 69  reelist} {freeli
4c20: 73 74 7d 20 7b 66 72 65 65 2d 70 61 67 65 20 6c  st} {free-page l
4c30: 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31  ist}</tcl>.<h3>1
4c40: 2e 34 20 54 68 65 20 46 72 65 65 6c 69 73 74 3c  .4 The Freelist<
4c50: 2f 68 33 3e 0a 0a 3c 70 3e 41 20 64 61 74 61 62  /h3>..<p>A datab
4c60: 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74 20 63  ase file might c
4c70: 6f 6e 74 61 69 6e 20 6f 6e 65 20 6f 72 20 6d 6f  ontain one or mo
4c80: 72 65 20 70 61 67 65 73 20 74 68 61 74 20 61 72  re pages that ar
4c90: 65 20 6e 6f 74 20 69 6e 0a 61 63 74 69 76 65 20  e not in.active 
4ca0: 75 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  use.  Unused pag
4cb0: 65 73 20 63 61 6e 20 63 6f 6d 65 20 61 62 6f 75  es can come abou
4cc0: 74 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20  t, for example, 
4cd0: 77 68 65 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  when information
4ce0: 0a 69 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d  .is deleted from
4cf0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
4d00: 55 6e 75 73 65 64 20 70 61 67 65 73 20 61 72 65  Unused pages are
4d10: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 66   stored on the f
4d20: 72 65 65 6c 69 73 74 0a 61 6e 64 20 61 72 65 20  reelist.and are 
4d30: 72 65 75 73 65 64 20 77 68 65 6e 20 61 64 64 69  reused when addi
4d40: 74 69 6f 6e 61 6c 20 70 61 67 65 73 20 61 72 65  tional pages are
4d50: 20 72 65 71 75 69 72 65 64 2e 3c 2f 70 3e 0a 0a   required.</p>..
4d60: 3c 70 3e 54 68 65 20 66 72 65 65 6c 69 73 74 20  <p>The freelist 
4d70: 69 73 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20  is organized as 
4d80: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
4d90: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
4da0: 70 61 67 65 73 0a 77 69 74 68 20 65 61 63 68 20  pages.with each 
4db0: 74 72 75 6e 6b 20 70 61 67 65 73 20 63 6f 6e 74  trunk pages cont
4dc0: 61 69 6e 69 6e 67 20 70 61 67 65 20 6e 75 6d 62  aining page numb
4dd0: 65 72 73 20 66 6f 72 20 7a 65 72 6f 20 6f 72 20  ers for zero or 
4de0: 6d 6f 72 65 20 66 72 65 65 6c 69 73 74 0a 6c 65  more freelist.le
4df0: 61 66 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c  af pages.</p>..<
4e00: 70 3e 41 20 66 72 65 65 6c 69 73 74 20 74 72 75  p>A freelist tru
4e10: 6e 6b 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73  nk page consists
4e20: 20 6f 66 20 61 6e 20 61 72 72 61 79 20 6f 66 20   of an array of 
4e30: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
4e40: 6e 20 69 6e 74 65 67 65 72 73 2e 0a 54 68 65 20  n integers..The 
4e50: 73 69 7a 65 20 6f 66 20 74 68 65 20 61 72 72 61  size of the arra
4e60: 79 20 69 73 20 61 73 20 6d 61 6e 79 20 69 6e 74  y is as many int
4e70: 65 67 65 72 73 20 61 73 20 77 69 6c 6c 20 66 69  egers as will fi
4e80: 74 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20  t in the usable 
4e90: 73 70 61 63 65 0a 6f 66 20 61 20 70 61 67 65 2e  space.of a page.
4ea0: 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 75 73    The minimum us
4eb0: 61 62 6c 65 20 73 70 61 63 65 20 69 73 20 34 38  able space is 48
4ec0: 30 20 62 79 74 65 73 20 73 6f 20 74 68 65 20 61  0 bytes so the a
4ed0: 72 72 61 79 20 77 69 6c 6c 20 61 6c 77 61 79 73  rray will always
4ee0: 0a 62 65 20 61 74 20 6c 65 61 73 74 20 31 32 30  .be at least 120
4ef0: 20 65 6e 74 72 69 65 73 20 69 6e 20 6c 65 6e 67   entries in leng
4f00: 74 68 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  th.  ^The first 
4f10: 69 6e 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65  integer on a fre
4f20: 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70 61 67 65  elist trunk.page
4f30: 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d   is the page num
4f40: 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20  ber of the next 
4f50: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
4f60: 61 67 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20  age in the list 
4f70: 6f 72 20 7a 65 72 6f 20 0a 69 66 20 74 68 69 73  or zero .if this
4f80: 20 69 73 20 74 68 65 20 6c 61 73 74 20 66 72 65   is the last fre
4f90: 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65  elist trunk page
4fa0: 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 69  .  ^The second i
4fb0: 6e 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65  nteger on a free
4fc0: 6c 69 73 74 0a 74 72 75 6e 6b 20 70 61 67 65 20  list.trunk page 
4fd0: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
4fe0: 20 6c 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74   leaf page point
4ff0: 65 72 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20  ers to follow.  
5000: 0a 5e 28 43 61 6c 6c 20 74 68 65 20 73 65 63 6f  .^(Call the seco
5010: 6e 64 20 69 6e 74 65 67 65 72 20 6f 6e 20 61 20  nd integer on a 
5020: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
5030: 61 67 65 20 4c 2e 0a 49 66 20 4c 20 69 73 20 67  age L..If L is g
5040: 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
5050: 20 74 68 65 6e 20 69 6e 74 65 67 65 72 73 20 77   then integers w
5060: 69 74 68 20 61 72 72 61 79 20 69 6e 64 65 78 65  ith array indexe
5070: 73 20 62 65 74 77 65 65 6e 20 32 20 61 6e 64 0a  s between 2 and.
5080: 4c 2b 31 20 69 6e 63 6c 75 73 69 76 65 20 63 6f  L+1 inclusive co
5090: 6e 74 61 69 6e 20 70 61 67 65 20 6e 75 6d 62 65  ntain page numbe
50a0: 72 73 20 66 6f 72 20 66 72 65 65 6c 69 73 74 20  rs for freelist 
50b0: 6c 65 61 66 20 70 61 67 65 73 2e 29 5e 3c 2f 70  leaf pages.)^</p
50c0: 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c  >..<p>Freelist l
50d0: 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69  eaf pages contai
50e0: 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  n no information
50f0: 2e 20 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64  .  ^SQLite avoid
5100: 73 20 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69  s reading or.wri
5110: 74 69 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65  ting freelist le
5120: 61 66 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65  af pages in orde
5130: 72 20 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b  r to reduce disk
5140: 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20   I/O.</p>..<p>A 
5150: 62 75 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65  bug in SQLite ve
5160: 72 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20  rsions prior to 
5170: 33 2e 36 2e 30 20 63 61 75 73 65 64 20 74 68 65  3.6.0 caused the
5180: 20 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a   database to be.
5190: 72 65 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72  reported as corr
51a0: 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
51b0: 65 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73  e last 6 entries
51c0: 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74   in the freelist
51d0: 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72   trunk page .arr
51e0: 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e  ay contained non
51f0: 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e  -zero values.  N
5200: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
5210: 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68   SQLite do not h
5220: 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d  ave.this problem
5230: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77  .  ^However, new
5240: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
5250: 51 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69  QLite still avoi
5260: 64 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73  d using the .las
5270: 74 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e  t six entries in
5280: 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72   the freelist tr
5290: 75 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69  unk page array i
52a0: 6e 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74  n order that dat
52b0: 61 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61  abase.files crea
52c0: 74 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72  ted by newer ver
52d0: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
52e0: 63 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f  can be read by o
52f0: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66  lder versions.of
5300: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
5310: 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  >^The number of 
5320: 66 72 65 65 6c 69 73 74 20 70 61 67 65 73 20 69  freelist pages i
5330: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d  s stored as a 4-
5340: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
5350: 69 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64  integer.in the d
5360: 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 61  atabase header a
5370: 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33  t an offset of 3
5380: 36 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  6 from the begin
5390: 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65  ning of the file
53a0: 2e 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 20  ..^The database 
53b0: 68 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72  header also stor
53c0: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
53d0: 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  er of the first 
53e0: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70  freelist trunk.p
53f0: 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20  age as a 4-byte 
5400: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
5410: 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  er at an offset 
5420: 6f 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62  of 32 from the b
5430: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
5440: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  file.</p>..<tcl>
5450: 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 74 72 65  hd_fragment btre
5460: 65 20 7b 42 2a 2d 54 72 65 65 73 7d 3c 2f 74 63  e {B*-Trees}</tc
5470: 6c 3e 0a 3c 68 33 3e 31 2e 35 20 42 2d 74 72 65  l>.<h3>1.5 B-tre
5480: 65 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70  e Pages</h3>..<p
5490: 3e 54 68 65 20 62 2d 74 72 65 65 20 61 6c 67 6f  >The b-tree algo
54a0: 72 69 74 68 6d 20 70 72 6f 76 69 64 65 73 20 6b  rithm provides k
54b0: 65 79 2f 64 61 74 61 20 73 74 6f 72 61 67 65 20  ey/data storage 
54c0: 77 69 74 68 20 75 6e 69 71 75 65 20 61 6e 64 0a  with unique and.
54d0: 6f 72 64 65 72 65 64 20 6b 65 79 73 20 6f 6e 20  ordered keys on 
54e0: 70 61 67 65 2d 6f 72 69 65 6e 74 65 64 20 73 74  page-oriented st
54f0: 6f 72 61 67 65 20 64 65 76 69 63 65 73 2e 0a 46  orage devices..F
5500: 6f 72 20 62 61 63 6b 67 72 6f 75 6e 64 20 69 6e  or background in
5510: 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 62 2d 74  formation on b-t
5520: 72 65 65 73 2c 20 73 65 65 0a 4b 6e 75 74 68 2c  rees, see.Knuth,
5530: 20 3c 75 3e 54 68 65 20 41 72 74 20 4f 66 20 43   <u>The Art Of C
5540: 6f 6d 70 75 74 65 72 20 50 72 6f 67 72 61 6d 6d  omputer Programm
5550: 69 6e 67 3c 2f 75 3e 2c 20 56 6f 6c 75 6d 65 20  ing</u>, Volume 
5560: 33 20 22 53 6f 72 74 69 6e 67 0a 61 6e 64 20 53  3 "Sorting.and S
5570: 65 61 72 63 68 69 6e 67 22 2c 20 70 61 67 65 73  earching", pages
5580: 20 34 37 31 2d 34 37 39 2e 20 20 54 77 6f 20 6b   471-479.  Two k
5590: 69 6e 64 73 20 6f 66 20 62 2d 74 72 65 65 73 20  inds of b-trees 
55a0: 61 72 65 20 75 73 65 64 20 62 79 0a 53 51 4c 69  are used by.SQLi
55b0: 74 65 2e 20 20 54 68 65 20 61 6c 67 6f 72 69 74  te.  The algorit
55c0: 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61  hm that Knuth ca
55d0: 6c 6c 73 20 22 42 2a 2d 54 72 65 65 22 20 73 74  lls "B*-Tree" st
55e0: 6f 72 65 73 20 61 6c 6c 20 64 61 74 61 0a 69 6e  ores all data.in
55f0: 20 74 68 65 20 6c 65 61 76 65 73 20 6f 66 20 74   the leaves of t
5600: 68 65 20 74 72 65 65 2e 20 20 53 51 4c 69 74 65  he tree.  SQLite
5610: 20 63 61 6c 6c 73 20 74 68 69 73 20 76 61 72 69   calls this vari
5620: 65 74 79 20 6f 66 20 62 2d 74 72 65 65 0a 61 20  ety of b-tree.a 
5630: 22 74 61 62 6c 65 20 62 2d 74 72 65 65 22 2e 20  "table b-tree". 
5640: 54 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68  The algorithm th
5650: 61 74 20 4b 6e 75 74 68 20 63 61 6c 6c 73 20 73  at Knuth calls s
5660: 69 6d 70 6c 79 20 22 42 2d 54 72 65 65 22 0a 73  imply "B-Tree".s
5670: 74 6f 72 65 73 20 62 6f 74 68 20 74 68 65 20 6b  tores both the k
5680: 65 79 20 61 6e 64 20 74 68 65 20 64 61 74 61 20  ey and the data 
5690: 74 6f 67 65 74 68 65 72 20 69 6e 20 62 6f 74 68  together in both
56a0: 20 6c 65 61 76 65 73 0a 61 6e 64 20 69 6e 20 69   leaves.and in i
56b0: 6e 74 65 72 69 6f 72 20 70 61 67 65 73 2e 20 20  nterior pages.  
56c0: 49 6e 20 74 68 65 20 53 51 4c 69 74 65 20 69 6d  In the SQLite im
56d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68  plementation, th
56e0: 65 20 6f 72 69 67 69 6e 61 6c 0a 42 2d 54 72 65  e original.B-Tre
56f0: 65 20 61 6c 67 6f 72 69 74 68 6d 20 73 74 6f 72  e algorithm stor
5700: 65 73 20 6b 65 79 73 20 6f 6e 6c 79 2c 20 6f 6d  es keys only, om
5710: 69 74 74 69 6e 67 20 74 68 65 20 64 61 74 61 20  itting the data 
5720: 65 6e 74 69 72 65 6c 79 2c 20 61 6e 64 0a 69 73  entirely, and.is
5730: 20 63 61 6c 6c 65 64 20 61 6e 20 22 69 6e 64 65   called an "inde
5740: 78 20 62 2d 74 72 65 65 22 2e 0a 0a 3c 70 3e 41  x b-tree"...<p>A
5750: 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20   b-tree page is 
5760: 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 72 69  either an interi
5770: 6f 72 20 70 61 67 65 20 6f 72 20 61 20 6c 65 61  or page or a lea
5780: 66 20 70 61 67 65 2e 0a 41 20 6c 65 61 66 20 70  f page..A leaf p
5790: 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6b 65 79  age contains key
57a0: 73 20 61 6e 64 20 69 6e 20 74 68 65 20 63 61 73  s and in the cas
57b0: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74  e of a table b-t
57c0: 72 65 65 20 65 61 63 68 0a 6b 65 79 20 68 61 73  ree each.key has
57d0: 20 61 73 73 6f 63 69 61 74 65 64 20 64 61 74 61   associated data
57e0: 2e 20 20 41 6e 20 69 6e 74 65 72 69 6f 72 20 70  .  An interior p
57f0: 61 67 65 20 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b  age contains.K k
5800: 65 79 73 20 74 6f 67 65 74 68 65 72 20 77 69 74  eys together wit
5810: 68 20 4b 2b 31 20 70 6f 69 6e 74 65 72 73 20 74  h K+1 pointers t
5820: 6f 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70  o child b-tree p
5830: 61 67 65 73 2e 0a 41 20 22 70 6f 69 6e 74 65 72  ages..A "pointer
5840: 22 20 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72  " in an interior
5850: 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20   b-tree page is 
5860: 6a 75 73 74 20 74 68 65 20 33 31 2d 62 69 74 20  just the 31-bit 
5870: 69 6e 74 65 67 65 72 0a 70 61 67 65 20 6e 75 6d  integer.page num
5880: 62 65 72 20 6f 66 20 74 68 65 20 63 68 69 6c 64  ber of the child
5890: 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 44   page.</p>..<p>D
58a0: 65 66 69 6e 65 20 74 68 65 20 64 65 70 74 68 0a  efine the depth.
58b0: 6f 66 20 61 20 6c 65 61 66 20 62 2d 74 72 65 65  of a leaf b-tree
58c0: 20 74 6f 20 62 65 20 31 20 61 6e 64 20 74 68 65   to be 1 and the
58d0: 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20 69 6e   depth of any in
58e0: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 74 6f  terior b-tree to
58f0: 20 62 65 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61   be one.more tha
5900: 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 64 65  n the maximum de
5910: 70 74 68 20 6f 66 20 61 6e 79 20 6f 66 20 69 74  pth of any of it
5920: 73 20 63 68 69 6c 64 72 65 6e 2e 20 20 5e 49 6e  s children.  ^In
5930: 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 64   a well-formed.d
5940: 61 74 61 62 61 73 65 2c 20 61 6c 6c 20 63 68 69  atabase, all chi
5950: 6c 64 72 65 6e 20 6f 66 20 61 6e 20 69 6e 74 65  ldren of an inte
5960: 72 69 6f 72 20 62 2d 74 72 65 65 20 68 61 76 65  rior b-tree have
5970: 20 74 68 65 20 73 61 6d 65 20 64 65 70 74 68 2e   the same depth.
5980: 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69  </p>..<p>In an i
5990: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70  nterior b-tree p
59a0: 61 67 65 2c 20 74 68 65 20 70 6f 69 6e 74 65 72  age, the pointer
59b0: 73 20 61 6e 64 20 6b 65 79 73 20 6c 6f 67 69 63  s and keys logic
59c0: 61 6c 6c 79 20 61 6c 74 65 72 6e 61 74 65 20 0a  ally alternate .
59d0: 77 69 74 68 20 61 20 70 6f 69 6e 74 65 72 20 6f  with a pointer o
59e0: 6e 20 62 6f 74 68 20 65 6e 64 73 2e 20 28 54 68  n both ends. (Th
59f0: 65 20 70 72 65 76 69 6f 75 73 20 73 65 6e 74 65  e previous sente
5a00: 6e 63 65 20 69 73 20 74 6f 20 62 65 20 75 6e 64  nce is to be und
5a10: 65 72 73 74 6f 6f 64 0a 63 6f 6e 63 65 70 74 75  erstood.conceptu
5a20: 61 6c 6c 79 20 2d 20 74 68 65 20 61 63 74 75 61  ally - the actua
5a30: 6c 20 6c 61 79 6f 75 74 20 6f 66 20 74 68 65 20  l layout of the 
5a40: 6b 65 79 73 20 61 6e 64 0a 70 6f 69 6e 74 65 72  keys and.pointer
5a50: 73 20 77 69 74 68 69 6e 20 74 68 65 20 70 61 67  s within the pag
5a60: 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
5a70: 63 61 74 65 64 20 61 6e 64 20 77 69 6c 6c 20 62  cated and will b
5a80: 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74  e described in.t
5a90: 68 65 20 73 65 71 75 65 6c 2e 29 20 20 41 6c 6c  he sequel.)  All
5aa0: 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68 65   keys within the
5ab0: 20 73 61 6d 65 20 70 61 67 65 20 61 72 65 20 75   same page are u
5ac0: 6e 69 71 75 65 20 61 6e 64 20 61 72 65 20 6c 6f  nique and are lo
5ad0: 67 69 63 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a 65  gically.organize
5ae0: 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  d in ascending o
5af0: 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74  rder from left t
5b00: 6f 20 72 69 67 68 74 2e 20 20 28 41 67 61 69 6e  o right.  (Again
5b10: 2c 20 74 68 69 73 20 6f 72 64 65 72 69 6e 67 0a  , this ordering.
5b20: 69 73 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74 20  is logical, not 
5b30: 70 68 79 73 69 63 61 6c 2e 20 20 54 68 65 20 61  physical.  The a
5b40: 63 74 75 61 6c 20 6c 6f 63 61 74 69 6f 6e 20 6f  ctual location o
5b50: 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68  f keys within th
5b60: 65 20 70 61 67 65 0a 69 73 20 61 72 62 69 74 72  e page.is arbitr
5b70: 61 72 79 2e 29 20 5e 46 6f 72 20 61 6e 79 20 6b  ary.) ^For any k
5b80: 65 79 20 58 2c 20 70 6f 69 6e 74 65 72 73 20 74  ey X, pointers t
5b90: 6f 20 74 68 65 20 6c 65 66 74 0a 6f 66 20 61 20  o the left.of a 
5ba0: 58 20 72 65 66 65 72 20 74 6f 20 62 2d 74 72 65  X refer to b-tre
5bb0: 65 20 70 61 67 65 73 20 6f 6e 20 77 68 69 63 68  e pages on which
5bc0: 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6c 65   all keys are le
5bd0: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
5be0: 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65 72 73   to X..^Pointers
5bf0: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66   to the right of
5c00: 20 58 20 72 65 66 65 72 20 74 6f 20 70 61 67 65   X refer to page
5c10: 73 20 77 68 65 72 65 20 61 6c 6c 20 6b 65 79 73  s where all keys
5c20: 20 61 72 65 20 0a 67 72 65 61 74 65 72 20 74 68   are .greater th
5c30: 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69  an X.</p>..<p>Wi
5c40: 74 68 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72  thin an interior
5c50: 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 65 61   b-tree page, ea
5c60: 63 68 20 6b 65 79 20 61 6e 64 20 74 68 65 20 70  ch key and the p
5c70: 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 0a 69 6d  ointer to its.im
5c80: 6d 65 64 69 61 74 65 20 6c 65 66 74 20 61 72 65  mediate left are
5c90: 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61   combined into a
5ca0: 20 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65   structure calle
5cb0: 64 20 61 20 22 63 65 6c 6c 22 2e 20 20 54 68 65  d a "cell".  The
5cc0: 0a 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e  .right-most poin
5cd0: 74 65 72 20 69 73 20 68 65 6c 64 20 73 65 70 61  ter is held sepa
5ce0: 72 61 74 65 6c 79 2e 20 20 41 20 6c 65 61 66 20  rately.  A leaf 
5cf0: 62 2d 74 72 65 65 20 70 61 67 65 20 68 61 73 20  b-tree page has 
5d00: 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c 20 62 75 74  no.pointers, but
5d10: 20 69 74 20 73 74 69 6c 6c 20 75 73 65 73 20 74   it still uses t
5d20: 68 65 20 63 65 6c 6c 20 73 74 72 75 63 74 75 72  he cell structur
5d30: 65 20 74 6f 20 68 6f 6c 64 20 6b 65 79 73 20 66  e to hold keys f
5d40: 6f 72 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 73  or.index b-trees
5d50: 20 6f 72 20 6b 65 79 73 20 61 6e 64 20 63 6f 6e   or keys and con
5d60: 74 65 6e 74 20 66 6f 72 20 74 61 62 6c 65 20 62  tent for table b
5d70: 2d 74 72 65 65 73 2e 20 20 44 61 74 61 20 69 73  -trees.  Data is
5d80: 20 61 6c 73 6f 0a 63 6f 6e 74 61 69 6e 65 64 20   also.contained 
5d90: 69 6e 20 74 68 65 20 63 65 6c 6c 2e 0a 3c 2f 70  in the cell..</p
5da0: 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62 2d 74 72  >..<p>Every b-tr
5db0: 65 65 20 70 61 67 65 20 68 61 73 20 61 74 20 6d  ee page has at m
5dc0: 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e 74 20 62  ost one parent b
5dd0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 20 62 2d  -tree page..A b-
5de0: 74 72 65 65 20 70 61 67 65 20 77 69 74 68 6f 75  tree page withou
5df0: 74 20 61 20 70 61 72 65 6e 74 20 69 73 20 63 61  t a parent is ca
5e00: 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70 61 67 65  lled a root page
5e10: 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74 72 65 65  .  A root b-tree
5e20: 20 70 61 67 65 0a 74 6f 67 65 74 68 65 72 20 77   page.together w
5e30: 69 74 68 20 74 68 65 20 63 6c 6f 73 75 72 65 20  ith the closure 
5e40: 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e 20  of its children 
5e50: 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65 74 65 20  form a complete 
5e60: 62 2d 74 72 65 65 2e 0a 49 74 20 69 73 20 70 6f  b-tree..It is po
5e70: 73 73 69 62 6c 65 20 28 61 6e 64 20 69 6e 20 66  ssible (and in f
5e80: 61 63 74 20 72 61 74 68 65 72 20 63 6f 6d 6d 6f  act rather commo
5e90: 6e 29 20 74 6f 20 68 61 76 65 20 61 20 63 6f 6d  n) to have a com
5ea0: 70 6c 65 74 65 20 62 2d 74 72 65 65 0a 74 68 61  plete b-tree.tha
5eb0: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
5ec0: 73 69 6e 67 6c 65 20 70 61 67 65 20 74 68 61 74  single page that
5ed0: 20 69 73 20 62 6f 74 68 20 61 20 6c 65 61 66 20   is both a leaf 
5ee0: 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e 0a 42 65  and the root..Be
5ef0: 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20  cause there are 
5f00: 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20 70 61  pointers from pa
5f10: 72 65 6e 74 73 20 74 6f 20 63 68 69 6c 64 72 65  rents to childre
5f20: 6e 2c 20 65 76 65 72 79 20 70 61 67 65 20 6f 66  n, every page of
5f30: 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a.complete b-tr
5f40: 65 65 20 63 61 6e 20 62 65 20 6c 6f 63 61 74 65  ee can be locate
5f50: 64 20 69 66 20 6f 6e 6c 79 20 74 68 65 20 72 6f  d if only the ro
5f60: 6f 74 20 70 61 67 65 20 69 73 20 6b 6e 6f 77 6e  ot page is known
5f70: 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74 72 65 65  .  Hence,.b-tree
5f80: 73 20 61 72 65 20 69 64 65 6e 74 69 66 69 65 64  s are identified
5f90: 20 62 79 20 74 68 65 69 72 20 72 6f 6f 74 20 70   by their root p
5fa0: 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a  age number.</p>.
5fb0: 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67  .<p>A b-tree pag
5fc0: 65 20 69 73 20 65 69 74 68 65 72 20 61 20 74 61  e is either a ta
5fd0: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  ble b-tree page 
5fe0: 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  or an index b-tr
5ff0: 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20 70 61 67  ee page..All pag
6000: 65 73 20 77 69 74 68 69 6e 20 65 61 63 68 20 63  es within each c
6010: 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20 61  omplete b-tree a
6020: 72 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20 74  re of the same t
6030: 79 70 65 3a 20 65 69 74 68 65 72 20 74 61 62 6c  ype: either tabl
6040: 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65  e.or index.  The
6050: 72 65 20 69 73 20 61 20 6f 6e 65 20 74 61 62 6c  re is a one tabl
6060: 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74 68 65  e b-trees in the
6070: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 66   database file.f
6080: 6f 72 20 65 61 63 68 20 72 6f 77 69 64 20 74 61  or each rowid ta
6090: 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  ble in the datab
60a0: 61 73 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c  ase schema, incl
60b0: 75 64 69 6e 67 20 73 79 73 74 65 6d 20 74 61 62  uding system tab
60c0: 6c 65 73 0a 73 75 63 68 20 61 73 20 73 71 6c 69  les.such as sqli
60d0: 74 65 5f 6d 61 73 74 65 72 2e 20 20 54 68 65 72  te_master.  Ther
60e0: 65 20 69 73 20 6f 6e 65 20 69 6e 64 65 78 20 62  e is one index b
60f0: 2d 74 72 65 65 73 0a 69 6e 20 74 68 65 20 64 61  -trees.in the da
6100: 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
6110: 65 61 63 68 20 69 6e 64 65 78 20 69 6e 20 74 68  each index in th
6120: 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64  e schema, includ
6130: 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 65  ing implied inde
6140: 78 65 73 0a 63 72 65 61 74 65 64 20 62 79 20 75  xes.created by u
6150: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72  niqueness constr
6160: 61 69 6e 74 73 2e 20 20 54 68 65 72 65 20 61 72  aints.  There ar
6170: 65 20 6e 6f 20 62 2d 74 72 65 65 73 20 61 73 73  e no b-trees ass
6180: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 5b 76 69  ociated with.[vi
6190: 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 20 20  rtual tables].  
61a0: 53 70 65 63 69 66 69 63 20 76 69 72 74 75 61 6c  Specific virtual
61b0: 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
61c0: 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 6d 61 6b  ations might mak
61d0: 65 20 75 73 65 0a 6f 66 20 5b 73 68 61 64 6f 77  e use.of [shadow
61e0: 20 74 61 62 6c 65 73 5d 20 66 6f 72 20 73 74 6f   tables] for sto
61f0: 72 61 67 65 2c 20 62 75 74 20 74 68 6f 73 65 20  rage, but those 
6200: 73 68 61 64 6f 77 20 74 61 62 6c 65 73 20 77 69  shadow tables wi
6210: 6c 6c 20 68 61 76 65 20 73 65 70 61 72 61 74 65  ll have separate
6220: 0a 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20  .entries in the 
6230: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
6240: 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44    [WITHOUT ROWID
6250: 5d 20 74 61 62 6c 65 73 20 75 73 65 20 69 6e 64  ] tables use ind
6260: 65 78 20 62 2d 74 72 65 65 73 0a 72 61 74 68 65  ex b-trees.rathe
6270: 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62  r than a table b
6280: 2d 74 72 65 65 73 2c 20 73 6f 20 74 68 65 72 65  -trees, so there
6290: 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78 20 62 2d   is one.index b-
62a0: 74 72 65 65 20 69 6e 20 74 68 65 20 64 61 74 61  tree in the data
62b0: 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 65 61  base file for ea
62c0: 63 68 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49  ch [WITHOUT ROWI
62d0: 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20 62 2d  D] table..The b-
62e0: 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  tree correspondi
62f0: 6e 67 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ng to the sqlite
6300: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 73  _master table is
6310: 20 61 6c 77 61 79 73 20 61 20 74 61 62 6c 65 0a   always a table.
6320: 62 2d 74 72 65 65 20 61 6e 64 20 61 6c 77 61 79  b-tree and alway
6330: 73 20 68 61 73 20 61 20 72 6f 6f 74 20 70 61 67  s has a root pag
6340: 65 20 6f 66 20 31 2e 0a 54 68 65 20 73 71 6c 69  e of 1..The sqli
6350: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
6360: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
6370: 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
6380: 72 20 65 76 65 72 79 20 6f 74 68 65 72 20 0a 74  r every other .t
6390: 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 69  able and index i
63a0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
63b0: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  ile.</p>..<p>Eac
63c0: 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74 61 62  h entry in a tab
63d0: 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73 69 73  le b-tree consis
63e0: 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74 20 73  ts of a 64-bit s
63f0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65  igned integer ke
6400: 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31 34 37  y.and up to 2147
6410: 34 38 33 36 34 37 20 62 79 74 65 73 20 6f 66 20  483647 bytes of 
6420: 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
6430: 20 28 54 68 65 20 6b 65 79 20 6f 66 20 61 20 74   (The key of a t
6440: 61 62 6c 65 20 62 2d 74 72 65 65 0a 63 6f 72 72  able b-tree.corr
6450: 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 5b  esponds to the [
6460: 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 53 51  rowid] of the SQ
6470: 4c 20 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  L table that the
6480: 20 62 2d 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e   b-tree implemen
6490: 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72 20 74 61  ts.).Interior ta
64a0: 62 6c 65 20 62 2d 74 72 65 65 73 20 68 6f 6c 64  ble b-trees hold
64b0: 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64 20 70   only keys and p
64c0: 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64  ointers to child
64d0: 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61 20 69 73  ren..All data is
64e0: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
64f0: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  e table b-tree l
6500: 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45  eaves.</p>..<p>E
6510: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 6e 20  ach entry in an 
6520: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63 6f 6e  index b-tree con
6530: 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 62 69  sists of an arbi
6540: 74 72 61 72 79 20 6b 65 79 20 6f 66 20 75 70 0a  trary key of up.
6550: 74 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79  to 2147483647 by
6560: 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20 61 6e  tes in length an
6570: 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e 0a 0a  d no data.</p>..
6580: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
6590: 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20 7b 63   cell_payload {c
65a0: 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f 74 63  ell payload}</tc
65b0: 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65  l>.<p>Define the
65c0: 20 22 70 61 79 6c 6f 61 64 22 20 6f 66 20 61 20   "payload" of a 
65d0: 63 65 6c 6c 20 74 6f 20 62 65 20 74 68 65 20 61  cell to be the a
65e0: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
65f0: 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65 20 63  section.of the c
6600: 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69 6e 64  ell.  For an ind
6610: 65 78 20 62 2d 74 72 65 65 2c 20 74 68 65 20 6b  ex b-tree, the k
6620: 65 79 20 69 73 20 61 6c 77 61 79 73 20 61 72 62  ey is always arb
6630: 69 74 72 61 72 79 20 69 6e 20 6c 65 6e 67 74 68  itrary in length
6640: 0a 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20 70  .and hence the p
6650: 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20 6b 65  ayload is the ke
6660: 79 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  y.  There are no
6670: 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74   arbitrary lengt
6680: 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20 74 68  h elements.in th
6690: 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74 65 72  e cells of inter
66a0: 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65  ior table b-tree
66b0: 20 70 61 67 65 73 20 61 6e 64 20 73 6f 20 74 68   pages and so th
66c0: 6f 73 65 20 63 65 6c 6c 73 20 68 61 76 65 20 6e  ose cells have n
66d0: 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61 62 6c  o.payload.  Tabl
66e0: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
66f0: 67 65 73 20 63 6f 6e 74 61 69 6e 20 61 72 62 69  ges contain arbi
6700: 74 72 61 72 79 20 6c 65 6e 67 74 68 20 63 6f 6e  trary length con
6710: 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f 72 20  tent and.so for 
6720: 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65 20 70  cells on those p
6730: 61 67 65 73 20 74 68 65 20 70 61 79 6c 6f 61 64  ages the payload
6740: 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e   is the content.
6750: 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 73 69 7a  .<p>When the siz
6760: 65 20 6f 66 20 70 61 79 6c 6f 61 64 20 66 6f 72  e of payload for
6770: 20 61 20 63 65 6c 6c 20 65 78 63 65 65 64 73 20   a cell exceeds 
6780: 61 20 63 65 72 74 61 69 6e 20 74 68 72 65 73 68  a certain thresh
6790: 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65 66 69 6e  old (to.be defin
67a0: 65 64 20 6c 61 74 65 72 29 20 74 68 65 6e 20 6f  ed later) then o
67b0: 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 66 65  nly the first fe
67c0: 77 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 70  w bytes of the p
67d0: 61 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f 72 65  ayload.are store
67e0: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
67f0: 70 61 67 65 20 61 6e 64 20 74 68 65 20 62 61 6c  page and the bal
6800: 61 6e 63 65 20 69 73 20 73 74 6f 72 65 64 20 69  ance is stored i
6810: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  n a linked list.
6820: 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65 72 66  of content overf
6830: 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a  low pages.</p>..
6840: 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65  <p>A b-tree page
6850: 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
6860: 20 72 65 67 69 6f 6e 73 20 69 6e 20 74 68 65 20   regions in the 
6870: 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65 72 3a  following order:
6880: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20 31  ..<ol>.<li>The 1
6890: 30 30 2d 62 79 74 65 20 64 61 74 61 62 61 73 65  00-byte database
68a0: 20 66 69 6c 65 20 68 65 61 64 65 72 20 28 66 6f   file header (fo
68b0: 75 6e 64 20 6f 6e 20 70 61 67 65 20 31 20 6f 6e  und on page 1 on
68c0: 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20 6f 72  ly).<li>The 8 or
68d0: 20 31 32 20 62 79 74 65 20 62 2d 74 72 65 65 20   12 byte b-tree 
68e0: 70 61 67 65 20 68 65 61 64 65 72 0a 3c 6c 69 3e  page header.<li>
68f0: 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The cell pointer
6900: 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61 6c 6c   array.<li>Unall
6910: 6f 63 61 74 65 64 20 73 70 61 63 65 0a 3c 6c 69  ocated space.<li
6920: 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e  >The cell conten
6930: 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65 20 72  t area.<li>The r
6940: 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 2e 0a  eserved region..
6950: 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  </ol>.</p>..<p>T
6960: 68 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61  he 100-byte data
6970: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
6980: 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 6f   is found only o
6990: 6e 20 70 61 67 65 20 31 2c 20 77 68 69 63 68 20  n page 1, which 
69a0: 69 73 0a 61 6c 77 61 79 73 20 61 20 74 61 62 6c  is.always a tabl
69b0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20  e b-tree page.  
69c0: 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72 65 65  All other b-tree
69d0: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
69e0: 74 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d 69 74  tabase file.omit
69f0: 20 74 68 69 73 20 31 30 30 2d 62 79 74 65 20 68   this 100-byte h
6a00: 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  eader.</p>..<p>T
6a10: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
6a20: 6f 6e 20 69 73 20 61 6e 20 61 72 65 61 20 6f 66  on is an area of
6a30: 20 75 6e 75 73 65 64 20 73 70 61 63 65 20 61 74   unused space at
6a40: 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65 72   the end of ever
6a50: 79 0a 70 61 67 65 20 28 65 78 63 65 70 74 20 74  y.page (except t
6a60: 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67 65 29  he locking page)
6a70: 20 74 68 61 74 20 65 78 74 65 6e 73 69 6f 6e 73   that extensions
6a80: 20 63 61 6e 20 75 73 65 20 74 6f 20 68 6f 6c 64   can use to hold
6a90: 20 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f 72 6d   per-page.inform
6aa0: 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20 73 69 7a  ation.  ^The siz
6ab0: 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76 65  e of the reserve
6ac0: 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65 74 65  d region is dete
6ad0: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6f 6e  rmined by the on
6ae0: 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65 64 20  e-byte.unsigned 
6af0: 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20 61 74  integer found at
6b00: 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 32 30   an offset of 20
6b10: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
6b20: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 2e 0a  se file header..
6b30: 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  The size of the 
6b40: 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20  reserved region 
6b50: 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72 6f 2e  is usually zero.
6b60: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74  </p>..<p>The b-t
6b70: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
6b80: 69 73 20 38 20 62 79 74 65 73 20 69 6e 20 73 69  is 8 bytes in si
6b90: 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61 67 65  ze for leaf page
6ba0: 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73 20 66  s and 12.bytes f
6bb0: 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  or interior page
6bc0: 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62 79 74  s.  All multibyt
6bd0: 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  e values in the 
6be0: 70 61 67 65 20 68 65 61 64 65 72 0a 61 72 65 20  page header.are 
6bf0: 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68 65 20  big-endian..The 
6c00: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
6c10: 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  er is composed o
6c20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
6c30: 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c 63 65  fields:</p>..<ce
6c40: 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20  nter>.<i>B-tree 
6c50: 50 61 67 65 20 48 65 61 64 65 72 20 46 6f 72 6d  Page Header Form
6c60: 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
6c70: 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68  e border=1 width
6c80: 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 3e  ="80%">.<tr><th>
6c90: 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
6ca0: 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
6cb0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
6cc0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 30 3c  er valign=top>0<
6cd0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6ce0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20  valign=top>1<td 
6cf0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65  align=left>.^The
6d00: 20 6f 6e 65 2d 62 79 74 65 20 66 6c 61 67 20 61   one-byte flag a
6d10: 74 20 6f 66 66 73 65 74 20 30 20 69 6e 64 69 63  t offset 0 indic
6d20: 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72 65 65  ating the b-tree
6d30: 20 70 61 67 65 20 74 79 70 65 2e 0a 5e 41 20 76   page type..^A v
6d40: 61 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e 73 20  alue of 2 means 
6d50: 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69  the page is an i
6d60: 6e 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62 2d  nterior index b-
6d70: 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61  tree page..^A va
6d80: 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e 73 20 74  lue of 5 means t
6d90: 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69 6e  he page is an in
6da0: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
6db0: 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c  ree page..^A val
6dc0: 75 65 20 6f 66 20 31 30 20 6d 65 61 6e 73 20 74  ue of 10 means t
6dd0: 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65 61  he page is a lea
6de0: 66 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70  f index b-tree p
6df0: 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66  age..^A value of
6e00: 20 31 33 20 6d 65 61 6e 73 20 74 68 65 20 70 61   13 means the pa
6e10: 67 65 20 69 73 20 61 20 6c 65 61 66 20 74 61 62  ge is a leaf tab
6e20: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  le b-tree page..
6e30: 5e 41 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65  ^Any other value
6e40: 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65 20   for the b-tree 
6e50: 70 61 67 65 20 74 79 70 65 20 69 73 20 61 6e 20  page type is an 
6e60: 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74 64 20 61  error..<tr><td a
6e70: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6e80: 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67  gn=top>1<td alig
6e90: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6ea0: 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>2<td align=l
6eb0: 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62 79  eft>.^The two-by
6ec0: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
6ed0: 66 73 65 74 20 31 20 67 69 76 65 73 20 74 68 65  fset 1 gives the
6ee0: 20 73 74 61 72 74 20 6f 66 20 74 68 65 0a 66 69   start of the.fi
6ef0: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 20 6f 6e  rst freeblock on
6f00: 20 74 68 65 20 70 61 67 65 2c 20 6f 72 20 69 73   the page, or is
6f10: 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 61   zero if there a
6f20: 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73  re no freeblocks
6f30: 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
6f40: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6f50: 70 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>3<td align=cen
6f60: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32  ter valign=top>2
6f70: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
6f80: 5e 54 68 65 20 74 77 6f 2d 62 79 74 65 20 69 6e  ^The two-byte in
6f90: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
6fa0: 33 20 67 69 76 65 73 20 74 68 65 20 6e 75 6d 62  3 gives the numb
6fb0: 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74  er of cells on t
6fc0: 68 65 20 70 61 67 65 2e 0a 3c 74 72 3e 3c 74 64  he page..<tr><td
6fd0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6fe0: 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64 20 61 6c  lign=top>5<td al
6ff0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
7000: 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e  n=top>2<td align
7010: 3d 6c 65 66 74 3e 0a 5e 28 54 68 65 20 74 77 6f  =left>.^(The two
7020: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
7030: 20 6f 66 66 73 65 74 20 35 20 64 65 73 69 67 6e   offset 5 design
7040: 61 74 65 73 20 74 68 65 20 73 74 61 72 74 20 6f  ates the start o
7050: 66 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  f the cell conte
7060: 6e 74 0a 61 72 65 61 2e 20 20 41 20 7a 65 72 6f  nt.area.  A zero
7070: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 69 73 20   value for this 
7080: 69 6e 74 65 67 65 72 20 69 73 20 69 6e 74 65 72  integer is inter
7090: 70 72 65 74 65 64 20 61 73 20 36 35 35 33 36 2e  preted as 65536.
70a0: 29 5e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  )^.<tr><td align
70b0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
70c0: 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>7<td align=ce
70d0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
70e0: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
70f0: 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74 65 20 69  .^The one-byte i
7100: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
7110: 20 37 20 67 69 76 65 73 20 74 68 65 20 6e 75 6d   7 gives the num
7120: 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e 74 65  ber of fragmente
7130: 64 20 66 72 65 65 0a 62 79 74 65 73 20 77 69 74  d free.bytes wit
7140: 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e  hin the cell con
7150: 74 65 6e 74 20 61 72 65 61 2e 0a 3c 74 72 3e 3c  tent area..<tr><
7160: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7170: 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c 74 64 20  valign=top>8<td 
7180: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
7190: 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20 61 6c 69  ign=top>4<td ali
71a0: 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68 65 20 66  gn=left>.^(The f
71b0: 6f 75 72 2d 62 79 74 65 20 70 61 67 65 20 6e 75  our-byte page nu
71c0: 6d 62 65 72 20 61 74 20 6f 66 66 73 65 74 20 38  mber at offset 8
71d0: 20 69 73 20 74 68 65 20 72 69 67 68 74 2d 6d 6f   is the right-mo
71e0: 73 74 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 69  st pointer.  Thi
71f0: 73 0a 76 61 6c 75 65 20 61 70 70 65 61 72 73 20  s.value appears 
7200: 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  in the header of
7210: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
7220: 20 70 61 67 65 73 20 6f 6e 6c 79 20 61 6e 64 20   pages only and 
7230: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 0a  is omitted from.
7240: 61 6c 6c 20 6f 74 68 65 72 20 70 61 67 65 73 2e  all other pages.
7250: 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f  )^.</table></blo
7260: 63 6b 71 75 6f 74 65 3e 3c 2f 63 65 6e 74 65 72  ckquote></center
7270: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 65 6c 6c 20  >..<p>^The cell 
7280: 70 6f 69 6e 74 65 72 20 61 72 72 61 79 20 6f 66  pointer array of
7290: 20 61 20 62 2d 74 72 65 65 20 70 61 67 65 20 69   a b-tree page i
72a0: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
72b0: 77 73 20 74 68 65 20 62 2d 74 72 65 65 0a 70 61  ws the b-tree.pa
72c0: 67 65 20 68 65 61 64 65 72 2e 20 20 4c 65 74 20  ge header.  Let 
72d0: 4b 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20  K be the number 
72e0: 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68 65 20  of cells on the 
72f0: 62 74 72 65 65 2e 20 20 5e 54 68 65 20 63 65 6c  btree.  ^The cel
7300: 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72 61 79 20  l pointer.array 
7310: 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b 20 32 2d  consists of K 2-
7320: 62 79 74 65 20 69 6e 74 65 67 65 72 20 6f 66 66  byte integer off
7330: 73 65 74 73 20 74 6f 20 74 68 65 20 63 65 6c 6c  sets to the cell
7340: 20 63 6f 6e 74 65 6e 74 73 2e 20 20 5e 54 68 65   contents.  ^The
7350: 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72 73 20 61  .cell pointers a
7360: 72 65 20 61 72 72 61 6e 67 65 64 20 69 6e 20 6b  re arranged in k
7370: 65 79 20 6f 72 64 65 72 20 77 69 74 68 20 6c 65  ey order with le
7380: 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68  ft-most cell (th
7390: 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68 65 0a  e cell with the.
73a0: 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29 20 66 69  smallest key) fi
73b0: 72 73 74 20 61 6e 64 20 74 68 65 20 72 69 67 68  rst and the righ
73c0: 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65  t-most cell (the
73d0: 20 63 65 6c 6c 20 77 69 74 68 20 74 68 65 20 6c   cell with the l
73e0: 61 72 67 65 73 74 0a 6b 65 79 29 20 6c 61 73 74  argest.key) last
73f0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c 6c 20 63  .</p>..<p>Cell c
7400: 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f 72 65 64  ontent is stored
7410: 20 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e   in the cell con
7420: 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f 66 20 74  tent region of t
7430: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
7440: 53 51 4c 69 74 65 20 73 74 72 69 76 65 73 20 74  SQLite strives t
7450: 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73 20 61 73  o place cells as
7460: 20 66 61 72 20 74 6f 77 61 72 64 20 74 68 65 20   far toward the 
7470: 65 6e 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  end of the b-tre
7480: 65 20 70 61 67 65 20 61 73 0a 69 74 20 63 61 6e  e page as.it can
7490: 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 65  , in order to le
74a0: 61 76 65 20 73 70 61 63 65 20 66 6f 72 20 66 75  ave space for fu
74b0: 74 75 72 65 20 67 72 6f 77 74 68 20 6f 66 20 74  ture growth of t
74c0: 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20  he cell pointer 
74d0: 61 72 72 61 79 2e 0a 54 68 65 20 61 72 65 61 20  array..The area 
74e0: 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 6c  in between the l
74f0: 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72  ast cell pointer
7500: 20 61 72 72 61 79 20 65 6e 74 72 79 20 61 6e 64   array entry and
7510: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
7520: 66 0a 74 68 65 20 66 69 72 73 74 20 63 65 6c 6c  f.the first cell
7530: 20 69 73 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61   is the unalloca
7540: 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 70 3e  ted region..</p>
7550: 0a 0a 3c 70 3e 5e 49 66 20 61 20 70 61 67 65 20  ..<p>^If a page 
7560: 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 65 6c 6c  contains no cell
7570: 73 20 28 77 68 69 63 68 20 69 73 20 6f 6e 6c 79  s (which is only
7580: 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 61 20   possible for a 
7590: 72 6f 6f 74 20 70 61 67 65 0a 6f 66 20 61 20 74  root page.of a t
75a0: 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
75b0: 6e 73 20 6e 6f 20 72 6f 77 73 29 20 74 68 65 6e  ns no rows) then
75c0: 20 74 68 65 20 6f 66 66 73 65 74 20 74 6f 20 74   the offset to t
75d0: 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 0a  he cell content.
75e0: 61 72 65 61 20 77 69 6c 6c 20 65 71 75 61 6c 20  area will equal 
75f0: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 6d 69  the page size mi
7600: 6e 75 73 20 74 68 65 20 62 79 74 65 73 20 6f 66  nus the bytes of
7610: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 2e   reserved space.
7620: 20 20 5e 28 49 66 0a 74 68 65 20 64 61 74 61 62    ^(If.the datab
7630: 61 73 65 20 75 73 65 73 20 61 20 36 35 35 33 36  ase uses a 65536
7640: 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a 65 20  -byte page size 
7650: 61 6e 64 20 74 68 65 20 72 65 73 65 72 76 65 64  and the reserved
7660: 20 73 70 61 63 65 20 69 73 20 7a 65 72 6f 0a 28   space is zero.(
7670: 74 68 65 20 75 73 75 61 6c 20 76 61 6c 75 65 20  the usual value 
7680: 66 6f 72 20 72 65 73 65 72 76 65 64 20 73 70 61  for reserved spa
7690: 63 65 29 20 74 68 65 6e 20 74 68 65 20 63 65 6c  ce) then the cel
76a0: 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 66 73 65 74  l content offset
76b0: 20 6f 66 20 61 6e 0a 65 6d 70 74 79 20 70 61 67   of an.empty pag
76c0: 65 20 77 61 6e 74 73 20 74 6f 20 62 65 20 36 35  e wants to be 65
76d0: 35 33 36 2e 20 20 0a 48 6f 77 65 76 65 72 2c 20  536.  .However, 
76e0: 74 68 61 74 20 69 6e 74 65 67 65 72 20 69 73 20  that integer is 
76f0: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 20  too large to be 
7700: 73 74 6f 72 65 64 20 69 6e 20 61 0a 32 2d 62 79  stored in a.2-by
7710: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
7720: 67 65 72 2c 20 73 6f 20 61 20 76 61 6c 75 65 20  ger, so a value 
7730: 6f 66 20 30 20 69 73 20 75 73 65 64 20 69 6e 20  of 0 is used in 
7740: 69 74 73 20 70 6c 61 63 65 2e 29 5e 0a 0a 3c 70  its place.)^..<p
7750: 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20  >A freeblock is 
7760: 61 20 73 74 72 75 63 74 75 72 65 20 75 73 65 64  a structure used
7770: 20 74 6f 20 69 64 65 6e 74 69 66 79 20 75 6e 61   to identify una
7780: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 77  llocated space w
7790: 69 74 68 69 6e 0a 61 20 62 2d 74 72 65 65 20 70  ithin.a b-tree p
77a0: 61 67 65 2e 20 20 46 72 65 65 62 6c 6f 63 6b 73  age.  Freeblocks
77b0: 20 61 72 65 20 6f 72 67 61 6e 69 7a 65 64 20 61   are organized a
77c0: 73 20 61 20 63 68 61 69 6e 2e 20 20 5e 54 68 65  s a chain.  ^The
77d0: 20 66 69 72 73 74 20 32 20 62 79 74 65 73 20 6f   first 2 bytes o
77e0: 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b 20 61 72  f.a freeblock ar
77f0: 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  e a big-endian i
7800: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
7810: 74 68 65 20 6f 66 66 73 65 74 20 69 6e 20 74 68  the offset in th
7820: 65 20 62 2d 74 72 65 65 20 70 61 67 65 0a 6f 66  e b-tree page.of
7830: 20 74 68 65 20 6e 65 78 74 20 66 72 65 65 62 6c   the next freebl
7840: 6f 63 6b 20 69 6e 20 74 68 65 20 63 68 61 69 6e  ock in the chain
7850: 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65  , or zero if the
7860: 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20 74 68   freeblock is th
7870: 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65 20 63 68  e last on.the ch
7880: 61 69 6e 2e 20 20 5e 54 68 65 20 74 68 69 72 64  ain.  ^The third
7890: 20 61 6e 64 20 66 6f 75 72 74 68 20 62 79 74 65   and fourth byte
78a0: 73 20 6f 66 20 65 61 63 68 20 66 72 65 65 62 6c  s of each freebl
78b0: 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69 67 2d 65  ock form.a big-e
78c0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68  ndian integer wh
78d0: 69 63 68 20 69 73 20 74 68 65 20 73 69 7a 65 20  ich is the size 
78e0: 6f 66 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b  of the freeblock
78f0: 20 69 6e 20 62 79 74 65 73 2c 20 69 6e 63 6c 75   in bytes, inclu
7900: 64 69 6e 67 0a 74 68 65 20 34 2d 62 79 74 65 20  ding.the 4-byte 
7910: 68 65 61 64 65 72 2e 20 20 5e 46 72 65 65 62 6c  header.  ^Freebl
7920: 6f 63 6b 73 20 61 72 65 20 61 6c 77 61 79 73 20  ocks are always 
7930: 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20 6f 72 64  connected in ord
7940: 65 72 20 0a 6f 66 20 69 6e 63 72 65 61 73 69 6e  er .of increasin
7950: 67 20 6f 66 66 73 65 74 2e 20 20 5e 54 68 65 20  g offset.  ^The 
7960: 73 65 63 6f 6e 64 20 66 69 65 6c 64 20 6f 66 20  second field of 
7970: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
7980: 68 65 61 64 65 72 20 69 73 20 74 68 65 0a 6f 66  header is the.of
7990: 66 73 65 74 20 6f 66 20 74 68 65 20 66 69 72 73  fset of the firs
79a0: 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20 6f 72 20  t freeblock, or 
79b0: 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 61 72  zero if there ar
79c0: 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20  e no freeblocks 
79d0: 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20 20 5e 49  on the.page.  ^I
79e0: 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
79f0: 62 2d 74 72 65 65 20 70 61 67 65 2c 20 74 68 65  b-tree page, the
7a00: 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62  re will always b
7a10: 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 63  e at least one c
7a20: 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68 65 20 66  ell.before the f
7a30: 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2e 3c  irst freeblock.<
7a40: 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c  /p>..<p>A freebl
7a50: 6f 63 6b 20 72 65 71 75 69 72 65 73 20 61 74 20  ock requires at 
7a60: 6c 65 61 73 74 20 34 20 62 79 74 65 73 20 6f 66  least 4 bytes of
7a70: 20 73 70 61 63 65 2e 20 20 49 66 20 74 68 65 72   space.  If ther
7a80: 65 20 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64  e is an isolated
7a90: 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20 32 2c 20  .group of 1, 2, 
7aa0: 6f 72 20 33 20 75 6e 75 73 65 64 20 62 79 74 65  or 3 unused byte
7ab0: 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c  s within the cel
7ac0: 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20  l content area, 
7ad0: 74 68 6f 73 65 20 62 79 74 65 73 0a 63 6f 6d 70  those bytes.comp
7ae0: 72 69 73 65 20 61 20 66 72 61 67 6d 65 6e 74 2e  rise a fragment.
7af0: 20 20 5e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d    ^The total num
7b00: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
7b10: 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20 69 73  all fragments is
7b20: 20 73 74 6f 72 65 64 0a 69 6e 20 74 68 65 20 66   stored.in the f
7b30: 69 66 74 68 20 66 69 65 6c 64 20 6f 66 20 74 68  ifth field of th
7b40: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
7b50: 61 64 65 72 2e 20 20 5e 49 6e 20 61 20 77 65 6c  ader.  ^In a wel
7b60: 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20  l-formed b-tree 
7b70: 70 61 67 65 2c 0a 74 68 65 20 74 6f 74 61 6c 20  page,.the total 
7b80: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
7b90: 69 6e 20 66 72 61 67 6d 65 6e 74 73 20 6d 61 79  in fragments may
7ba0: 20 6e 6f 74 20 65 78 63 65 65 64 20 36 30 2e 3c   not exceed 60.<
7bb0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f 74 61  /p>..<p>The tota
7bc0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66 72 65 65  l amount of free
7bd0: 20 73 70 61 63 65 20 6f 6e 20 61 20 62 2d 74 72   space on a b-tr
7be0: 65 65 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73  ee page consists
7bf0: 20 6f 66 20 74 68 65 20 73 69 7a 65 0a 6f 66 20   of the size.of 
7c00: 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20  the unallocated 
7c10: 72 65 67 69 6f 6e 20 70 6c 75 73 20 74 68 65 20  region plus the 
7c20: 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20 61 6c  total size of al
7c30: 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20 70 6c 75  l freeblocks plu
7c40: 73 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  s the.number of 
7c50: 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65 65 20  fragmented free 
7c60: 62 79 74 65 73 2e 20 20 5e 53 51 4c 69 74 65 20  bytes.  ^SQLite 
7c70: 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f  may from time to
7c80: 20 74 69 6d 65 20 72 65 6f 72 67 61 6e 69 7a 65   time reorganize
7c90: 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65 20 73  .a b-tree page s
7ca0: 6f 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  o that there are
7cb0: 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f   no freeblocks o
7cc0: 72 20 66 72 61 67 6d 65 6e 74 20 62 79 74 65 73  r fragment bytes
7cd0: 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20 62 79 74  , all.unused byt
7ce0: 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  es are contained
7cf0: 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61   in the unalloca
7d00: 74 65 64 20 73 70 61 63 65 20 72 65 67 69 6f 6e  ted space region
7d10: 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c 73 20  , and all.cells 
7d20: 61 72 65 20 70 61 63 6b 65 64 20 74 69 67 68 74  are packed tight
7d30: 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ly at the end of
7d40: 20 74 68 65 20 70 61 67 65 2e 20 20 54 68 69 73   the page.  This
7d50: 20 69 73 20 63 61 6c 6c 65 64 20 0a 22 64 65 66   is called ."def
7d60: 72 61 67 6d 65 6e 74 69 6e 67 22 20 74 68 65 20  ragmenting" the 
7d70: 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f 70 3e  b-tree page.</p>
7d80: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
7d90: 6e 74 20 76 61 72 69 6e 74 20 7b 76 61 72 69 61  nt varint {varia
7da0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
7db0: 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f 74 63  er} {varint}</tc
7dc0: 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69 61 62 6c  l>..<p>A variabl
7dd0: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
7de0: 20 6f 72 20 22 76 61 72 69 6e 74 22 20 69 73 20   or "varint" is 
7df0: 61 20 73 74 61 74 69 63 20 48 75 66 66 6d 61 6e  a static Huffman
7e00: 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20 36 34 2d   encoding.of 64-
7e10: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
7e20: 65 6e 74 20 69 6e 74 65 67 65 72 73 20 74 68 61  ent integers tha
7e30: 74 20 75 73 65 73 20 6c 65 73 73 20 73 70 61 63  t uses less spac
7e40: 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70 6f 73 69  e for small posi
7e50: 74 69 76 65 20 0a 76 61 6c 75 65 73 2e 20 0a 41  tive .values. .A
7e60: 20 76 61 72 69 6e 74 20 69 73 20 62 65 74 77 65   varint is betwe
7e70: 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74 65 73  en 1 and 9 bytes
7e80: 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54 68 65   in length.  The
7e90: 20 76 61 72 69 6e 74 20 63 6f 6e 73 69 73 74 73   varint consists
7ea0: 20 6f 66 20 65 69 74 68 65 72 0a 7a 65 72 6f 20   of either.zero 
7eb0: 6f 72 20 6d 6f 72 65 20 62 79 74 65 20 77 68 69  or more byte whi
7ec0: 63 68 20 68 61 76 65 20 74 68 65 20 68 69 67 68  ch have the high
7ed0: 2d 6f 72 64 65 72 20 62 69 74 20 73 65 74 20 66  -order bit set f
7ee0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 73 69 6e  ollowed by a sin
7ef0: 67 6c 65 20 62 79 74 65 0a 77 69 74 68 20 74 68  gle byte.with th
7f00: 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
7f10: 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69 6e 65 20   clear, or nine 
7f20: 62 79 74 65 73 2c 20 77 68 69 63 68 65 76 65 72  bytes, whichever
7f30: 20 69 73 20 73 68 6f 72 74 65 72 2e 0a 54 68 65   is shorter..The
7f40: 20 6c 6f 77 65 72 20 73 65 76 65 6e 20 62 69 74   lower seven bit
7f50: 73 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  s of each of the
7f60: 20 66 69 72 73 74 20 65 69 67 68 74 20 62 79 74   first eight byt
7f70: 65 73 20 61 6e 64 20 61 6c 6c 20 38 20 62 69 74  es and all 8 bit
7f80: 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74 68 20 62  s of.the ninth b
7f90: 79 74 65 20 61 72 65 20 75 73 65 64 20 74 6f 20  yte are used to 
7fa0: 72 65 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  reconstruct the 
7fb0: 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  64-bit twos-comp
7fc0: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a  lement integer..
7fd0: 56 61 72 69 6e 74 73 20 61 72 65 20 62 69 67 2d  Varints are big-
7fe0: 65 6e 64 69 61 6e 3a 20 62 69 74 73 20 74 61 6b  endian: bits tak
7ff0: 65 6e 20 66 72 6f 6d 20 74 68 65 20 65 61 72 6c  en from the earl
8000: 69 65 72 20 62 79 74 65 20 6f 66 20 74 68 65 20  ier byte of the 
8010: 76 61 72 69 6e 74 0a 61 72 65 20 74 68 65 20 6d  varint.are the m
8020: 6f 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  ore significant 
8030: 61 6e 64 20 62 69 74 73 20 74 61 6b 65 6e 20 66  and bits taken f
8040: 72 6f 6d 20 74 68 65 20 6c 61 74 65 72 20 62 79  rom the later by
8050: 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  tes. </p>..<p>Th
8060: 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 63 65  e format of a ce
8070: 6c 6c 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68  ll depends on wh
8080: 69 63 68 20 6b 69 6e 64 20 6f 66 20 62 2d 74 72  ich kind of b-tr
8090: 65 65 20 70 61 67 65 20 74 68 65 20 63 65 6c 6c  ee page the cell
80a0: 0a 61 70 70 65 61 72 73 20 6f 6e 2e 20 20 54 68  .appears on.  Th
80b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
80c0: 65 20 73 68 6f 77 73 20 74 68 65 20 65 6c 65 6d  e shows the elem
80d0: 65 6e 74 73 20 6f 66 20 61 20 63 65 6c 6c 2c 20  ents of a cell, 
80e0: 69 6e 0a 6f 72 64 65 72 20 6f 66 20 61 70 70 65  in.order of appe
80f0: 61 72 61 6e 63 65 2c 20 66 6f 72 20 74 68 65 20  arance, for the 
8100: 76 61 72 69 6f 75 73 20 62 2d 74 72 65 65 20 70  various b-tree p
8110: 61 67 65 20 74 79 70 65 73 2e 3c 2f 70 3e 0a 0a  age types.</p>..
8120: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e  <blockquote><dl>
8130: 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d  .<dt><p>Table B-
8140: 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c  Tree Leaf Cell:<
8150: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
8160: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  <ul>.<li>A varin
8170: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74  t which is the t
8180: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
8190: 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 2c  ytes of payload,
81a0: 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f   including any.o
81b0: 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20 76 61  verflow.<li>A va
81c0: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
81d0: 65 20 69 6e 74 65 67 65 72 20 6b 65 79 2c 20 61  e integer key, a
81e0: 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69 64 5d 22 0a  .k.a. "[rowid]".
81f0: 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20  <li>The initial 
8200: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  portion of the p
8210: 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73  ayload that does
8220: 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76   not spill to ov
8230: 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c  erflow.pages..<l
8240: 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65  i>A 4-byte big-e
8250: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61  ndian integer pa
8260: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
8270: 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20  e first page of 
8280: 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67  the.overflow pag
8290: 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64  e list - omitted
82a0: 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20   if all payload 
82b0: 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  fits on the b-tr
82c0: 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f  ee page..</ul></
82d0: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e  p></dd>..<dt><p>
82e0: 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49 6e 74  Table B-Tree Int
82f0: 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c  erior Cell:</p><
8300: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e  /dt>.<dd><p><ul>
8310: 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69  .<li>A 4-byte bi
8320: 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75  g-endian page nu
8330: 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74 68  mber which is th
8340: 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69  e left child poi
8350: 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69  nter..<li>A vari
8360: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
8370: 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75 6c  integer key.</ul
8380: 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  ></p></dd>..<dt>
8390: 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20  <p>Index B-Tree 
83a0: 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f  Leaf Cell:</p></
83b0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a  dt>.<dd><p><ul>.
83c0: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
83d0: 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ch is the total 
83e0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
83f0: 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20  of key payload, 
8400: 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76  including any.ov
8410: 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69  erflow.<li>The i
8420: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
8430: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
8440: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
8450: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
8460: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
8470: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
8480: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
8490: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
84a0: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
84b0: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
84c0: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
84d0: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
84e0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
84f0: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  </ul></p></dd>..
8500: 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54  <dt><p>Index B-T
8510: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
8520: 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  l:</p></dt>.<dd>
8530: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d  <p><ul>.<li>A 4-
8540: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 70  byte big-endianp
8550: 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68  age number which
8560: 20 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69   is the left chi
8570: 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e  ld pointer..<li>
8580: 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  A varint which i
8590: 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
85a0: 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b  er of bytes of k
85b0: 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c  ey payload, incl
85c0: 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c  uding any.overfl
85d0: 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69  ow.<li>The initi
85e0: 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68  al portion of th
85f0: 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64  e payload that d
8600: 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f  oes not spill to
8610: 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e   overflow.pages.
8620: 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69  .<li>A 4-byte bi
8630: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
8640: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
8650: 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20   the first page 
8660: 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20  of the.overflow 
8670: 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74  page list - omit
8680: 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f  ted if all paylo
8690: 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62  ad fits on the b
86a0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c  -tree page..</ul
86b0: 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e  ></p></dd>.</dl>
86c0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
86d0: 70 3e 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  p>The informatio
86e0: 6e 20 61 62 6f 76 65 20 63 61 6e 20 62 65 20 72  n above can be r
86f0: 65 63 61 73 74 20 69 6e 74 6f 20 61 20 74 61 62  ecast into a tab
8700: 6c 65 20 66 6f 72 6d 61 74 20 61 73 20 66 6f 6c  le format as fol
8710: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  lows:</p>..<tcl>
8720: 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c  hd_fragment cell
8730: 66 6f 72 6d 61 74 20 7b 63 65 6c 6c 20 66 6f 72  format {cell for
8740: 6d 61 74 20 73 75 6d 6d 61 72 79 7d 3c 2f 74 63  mat summary}</tc
8750: 6c 3e 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42  l>.<center>.<i>B
8760: 2d 74 72 65 65 20 43 65 6c 6c 20 46 6f 72 6d 61  -tree Cell Forma
8770: 74 3c 2f 69 3e 0a 3c 74 61 62 6c 65 20 62 6f 72  t</i>.<table bor
8780: 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25  der=1 width="80%
8790: 22 3e 0a 3c 74 72 3e 3c 74 68 20 72 6f 77 73 70  ">.<tr><th rowsp
87a0: 61 6e 3d 32 3e 44 61 74 61 74 79 70 65 0a 20 20  an=2>Datatype.  
87b0: 20 20 3c 74 68 20 63 6f 6c 73 70 61 6e 3d 34 3e    <th colspan=4>
87c0: 41 70 70 65 61 72 73 20 69 6e 2e 2e 2e 0a 20 20  Appears in....  
87d0: 20 20 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e    <th rowspan=2>
87e0: 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
87f0: 3c 74 68 3e 54 61 62 6c 65 20 4c 65 61 66 0a 20  <th>Table Leaf. 
8800: 20 20 20 3c 74 68 3e 54 61 62 6c 65 20 49 6e 74     <th>Table Int
8810: 65 72 69 6f 72 0a 20 20 20 20 3c 74 68 3e 49 6e  erior.    <th>In
8820: 64 65 78 20 4c 65 61 66 0a 20 20 20 20 3c 74 68  dex Leaf.    <th
8830: 3e 49 6e 64 65 78 20 49 6e 74 65 72 69 6f 72 0a  >Index Interior.
8840: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
8850: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8860: 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20  4-byte integer. 
8870: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8880: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8890: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
88a0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
88b0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
88c0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
88d0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
88e0: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
88f0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8900: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8910: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66     <td align=lef
8920: 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t>Page number of
8930: 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c 74 72 3e   left child.<tr>
8940: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8950: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69   valign=top>vari
8960: 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  nt.    <td align
8970: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8980: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8990: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
89a0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
89b0: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
89c0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
89d0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
89e0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
89f0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8a00: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8a10: 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65 72 20 6f  gn=left>Number o
8a20: 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f  f bytes of paylo
8a30: 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ad.<tr><td align
8a40: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8a50: 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c 74  op>varint.    <t
8a60: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8a70: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8a80: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8a90: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8aa0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8ab0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8ac0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
8ad0: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
8ae0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8af0: 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74  op>&nbsp;.    <t
8b00: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 52 6f 77  d align=left>Row
8b10: 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  id.<tr><td align
8b20: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8b30: 6f 70 3e 62 79 74 65 20 61 72 72 61 79 0a 20 20  op>byte array.  
8b40: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8b50: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8b60: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8b70: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8b80: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
8b90: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8ba0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8bb0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8bc0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8bd0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8be0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65      <td align=le
8bf0: 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c  ft>Payload.<tr><
8c00: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8c10: 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74  valign=top>4-byt
8c20: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74  e integer.    <t
8c30: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8c40: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8c50: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8c60: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8c70: 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74  op>&nbsp;.    <t
8c80: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8c90: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8ca0: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8cb0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8cc0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8cd0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50  <td align=left>P
8ce0: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  age number of fi
8cf0: 72 73 74 20 6f 76 65 72 66 6c 6f 77 20 70 61 67  rst overflow pag
8d00: 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74  e.</table></cent
8d10: 65 72 3e 0a 0a 0a 0a 3c 74 72 3e 3c 74 64 20 61  er>....<tr><td a
8d20: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8d30: 67 6e 3d 74 6f 70 3e 0a 0a 3c 70 3e 54 68 65 20  gn=top>..<p>The 
8d40: 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61  amount of payloa
8d50: 64 20 74 68 61 74 20 73 70 69 6c 6c 73 20 6f 6e  d that spills on
8d60: 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  to overflow page
8d70: 73 20 61 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f  s also depends o
8d80: 6e 0a 74 68 65 20 70 61 67 65 20 74 79 70 65 2e  n.the page type.
8d90: 20 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77    For the follow
8da0: 69 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  ing computations
8db0: 2c 20 6c 65 74 20 55 20 62 65 20 74 68 65 20 75  , let U be the u
8dc0: 73 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20 61 20  sable size.of a 
8dd0: 64 61 74 61 62 61 73 65 20 70 61 67 65 2c 20 74  database page, t
8de0: 68 65 20 74 6f 74 61 6c 20 70 61 67 65 20 73 69  he total page si
8df0: 7a 65 20 6c 65 73 73 20 74 68 65 20 72 65 73 65  ze less the rese
8e00: 72 76 65 64 20 73 70 61 63 65 20 61 74 20 74 68  rved space at th
8e10: 65 0a 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61  e.end of each pa
8e20: 67 65 2e 20 20 41 6e 64 20 6c 65 74 20 50 20 62  ge.  And let P b
8e30: 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69  e the payload si
8e40: 7a 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ze.</p>..<blockq
8e50: 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 54 61  uote><dl>.<dt>Ta
8e60: 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20  ble B-Tree Leaf 
8e70: 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  Cell:</dt>.<dd><
8e80: 70 3e 0a 5e 49 66 20 74 68 65 20 70 61 79 6c 6f  p>.^If the paylo
8e90: 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c 65 73  ad size P is les
8ea0: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
8eb0: 74 6f 20 55 2d 33 35 20 74 68 65 6e 0a 74 68 65  to U-35 then.the
8ec0: 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 20   entire payload 
8ed0: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65  is stored on the
8ee0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
8ef0: 65 2e 20 20 0a 5e 28 4c 65 74 20 4d 20 62 65 20  e.  .^(Let M be 
8f00: 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d  ((U-12)*32/255)-
8f10: 32 33 2e 20 20 49 66 20 50 20 69 73 20 67 72 65  23.  If P is gre
8f20: 61 74 65 72 20 74 68 61 6e 20 55 2d 33 35 0a 74  ater than U-35.t
8f30: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
8f40: 66 20 62 79 74 65 20 73 74 6f 72 65 64 20 6f 6e  f byte stored on
8f50: 20 74 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66   the b-tree leaf
8f60: 20 70 61 67 65 20 69 73 20 74 68 65 20 73 6d 61   page is the sma
8f70: 6c 6c 65 72 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29  ller of.M+((P-M)
8f80: 25 28 55 2d 34 29 29 20 61 6e 64 20 55 2d 33 35  %(U-4)) and U-35
8f90: 2e 29 5e 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20  .)^.^(Note that 
8fa0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
8fb0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 6c 65  stored on the le
8fc0: 61 66 20 70 61 67 65 20 69 73 20 6e 65 76 65 72  af page is never
8fd0: 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a   less than M.)^.
8fe0: 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 54  </p></dd>..<dt>T
8ff0: 61 62 6c 65 20 42 2d 54 72 65 65 20 49 6e 74 65  able B-Tree Inte
9000: 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a  rior Cell:</dt>.
9010: 3c 64 64 3e 3c 70 3e 0a 49 6e 74 65 72 69 6f 72  <dd><p>.Interior
9020: 20 70 61 67 65 73 20 6f 66 20 74 61 62 6c 65 20   pages of table 
9030: 62 2d 74 72 65 65 73 20 68 61 76 65 20 6e 6f 20  b-trees have no 
9040: 70 61 79 6c 6f 61 64 20 61 6e 64 20 73 6f 20 74  payload and so t
9050: 68 65 72 65 20 69 73 20 6e 65 76 65 72 0a 61 6e  here is never.an
9060: 79 20 70 61 79 6c 6f 61 64 20 74 6f 20 73 70 69  y payload to spi
9070: 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c  ll..</p></dd>..<
9080: 64 74 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20  dt>Index B-Tree 
9090: 4c 65 61 66 20 4f 72 20 49 6e 74 65 72 69 6f 72  Leaf Or Interior
90a0: 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e   Cell:</dt>.<dd>
90b0: 3c 70 3e 0a 5e 28 4c 65 74 20 58 20 62 65 20 28  <p>.^(Let X be (
90c0: 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29 2d 32  (U-12)*64/255)-2
90d0: 33 29 2e 20 20 49 66 20 74 68 65 20 70 61 79 6c  3).  If the payl
90e0: 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c 65  oad size P is le
90f0: 73 73 20 74 68 61 6e 0a 6f 72 20 65 71 75 61 6c  ss than.or equal
9100: 20 74 6f 20 58 20 74 68 65 6e 20 74 68 65 20 65   to X then the e
9110: 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 20 69 73  ntire payload is
9120: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
9130: 2d 74 72 65 65 20 70 61 67 65 2e 29 5e 0a 5e 28  -tree page.)^.^(
9140: 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29  Let M be ((U-12)
9150: 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66  *32/255)-23.  If
9160: 20 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68   P is greater th
9170: 61 6e 20 58 20 74 68 65 6e 20 74 68 65 20 6e 75  an X then the nu
9180: 6d 62 65 72 0a 6f 66 20 62 79 74 65 20 73 74 6f  mber.of byte sto
9190: 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  red on the b-tre
91a0: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73 6d  e page is the sm
91b0: 61 6c 6c 65 72 20 6f 66 0a 4d 2b 28 28 50 2d 4d  aller of.M+((P-M
91c0: 29 25 28 55 2d 34 29 29 20 61 6e 64 20 58 2e 29  )%(U-4)) and X.)
91d0: 5e 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20 6e 75  ^.^(Note that nu
91e0: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 73 74  mber of bytes st
91f0: 6f 72 65 64 20 6f 6e 20 74 68 65 20 69 6e 64 65  ored on the inde
9200: 78 20 70 61 67 65 20 69 73 20 6e 65 76 65 72 20  x page is never 
9210: 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c  less than M.)^.<
9220: 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f  /p></dd>.</dl></
9230: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
9240: 54 68 65 20 6f 76 65 72 66 6c 6f 77 20 74 68 72  The overflow thr
9250: 65 73 68 6f 6c 64 73 20 61 72 65 20 64 65 73 69  esholds are desi
9260: 67 6e 65 64 20 74 6f 20 67 69 76 65 20 61 20 6d  gned to give a m
9270: 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74 20 6f 66  inimum fanout of
9280: 0a 34 20 66 6f 72 20 69 6e 64 65 78 20 62 2d 74  .4 for index b-t
9290: 72 65 65 73 20 61 6e 64 20 74 6f 20 6d 61 6b 65  rees and to make
92a0: 20 73 75 72 65 20 65 6e 6f 75 67 68 20 6f 66 20   sure enough of 
92b0: 74 68 65 20 70 61 79 6c 6f 61 64 0a 69 73 20 6f  the payload.is o
92c0: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
92d0: 65 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  e that the recor
92e0: 64 20 68 65 61 64 65 72 20 63 61 6e 20 75 73 75  d header can usu
92f0: 61 6c 6c 79 20 62 65 20 61 63 63 65 73 73 65 64  ally be accessed
9300: 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73 75 6c 74  .without consult
9310: 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20  ing an overflow 
9320: 70 61 67 65 2e 20 20 49 6e 20 68 69 6e 64 73 69  page.  In hindsi
9330: 67 68 74 2c 20 74 68 65 20 64 65 73 69 67 6e 65  ght, the designe
9340: 72 73 20 6f 66 0a 74 68 65 20 53 51 4c 69 74 65  rs of.the SQLite
9350: 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20 72 65   b-tree logic re
9360: 61 6c 69 7a 65 20 74 68 61 74 20 74 68 65 73 65  alize that these
9370: 20 74 68 72 65 73 68 6f 6c 64 73 20 63 6f 75 6c   thresholds coul
9380: 64 20 68 61 76 65 20 62 65 65 6e 0a 6d 61 64 65  d have been.made
9390: 20 6d 75 63 68 20 73 69 6d 70 6c 65 72 2e 20 20   much simpler.  
93a0: 48 6f 77 65 76 65 72 2c 20 74 68 65 20 63 6f 6d  However, the com
93b0: 70 75 74 61 74 69 6f 6e 73 20 63 61 6e 6e 6f 74  putations cannot
93c0: 20 62 65 20 63 68 61 6e 67 65 64 0a 77 69 74 68   be changed.with
93d0: 6f 75 74 20 72 65 73 75 6c 74 69 6e 67 20 69 6e  out resulting in
93e0: 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65   an incompatible
93f0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20 41   file format.  A
9400: 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  nd the current c
9410: 6f 6d 70 75 74 61 74 69 6f 6e 73 0a 77 6f 72 6b  omputations.work
9420: 20 77 65 6c 6c 2c 20 65 76 65 6e 20 69 66 20 74   well, even if t
9430: 68 65 79 20 61 72 65 20 61 20 6c 69 74 74 6c 65  hey are a little
9440: 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c   complex.</p>..<
9450: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
9460: 6f 76 66 6c 70 67 73 20 7b 6f 76 65 72 66 6c 6f  ovflpgs {overflo
9470: 77 20 70 61 67 65 7d 20 7b 6f 76 65 72 66 6c 6f  w page} {overflo
9480: 77 20 70 61 67 65 73 7d 3c 2f 74 63 6c 3e 0a 3c  w pages}</tcl>.<
9490: 68 33 3e 31 2e 36 20 43 65 6c 6c 20 50 61 79 6c  h3>1.6 Cell Payl
94a0: 6f 61 64 20 4f 76 65 72 66 6c 6f 77 20 50 61 67  oad Overflow Pag
94b0: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 57 68 65  es</h3>..<p>^Whe
94c0: 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 20 6f 66  n the payload of
94d0: 20 61 20 62 2d 74 72 65 65 20 63 65 6c 6c 20 69   a b-tree cell i
94e0: 73 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20  s too large for 
94f0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2c  the b-tree page,
9500: 0a 74 68 65 20 73 75 72 70 6c 75 73 20 69 73 20  .the surplus is 
9510: 73 70 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76 65  spilled onto ove
9520: 72 66 6c 6f 77 20 70 61 67 65 73 2e 20 20 5e 4f  rflow pages.  ^O
9530: 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20 66 6f  verflow pages fo
9540: 72 6d 20 61 20 6c 69 6e 6b 65 64 0a 6c 69 73 74  rm a linked.list
9550: 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 66 6f  .  ^The first fo
9560: 75 72 20 62 79 74 65 73 20 6f 66 20 65 61 63 68  ur bytes of each
9570: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61   overflow page a
9580: 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a  re a big-endian.
9590: 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
95a0: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
95b0: 20 6f 66 20 74 68 65 20 6e 65 78 74 20 70 61 67   of the next pag
95c0: 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20  e in the chain, 
95d0: 6f 72 20 7a 65 72 6f 0a 66 6f 72 20 74 68 65 20  or zero.for the 
95e0: 66 69 6e 61 6c 20 70 61 67 65 20 69 6e 20 74 68  final page in th
95f0: 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 66  e chain.  ^The f
9600: 69 66 74 68 20 62 79 74 65 20 74 68 72 6f 75 67  ifth byte throug
9610: 68 20 74 68 65 20 6c 61 73 74 20 75 73 61 62 6c  h the last usabl
9620: 65 0a 62 79 74 65 20 61 72 65 20 75 73 65 64 20  e.byte are used 
9630: 74 6f 20 68 6f 6c 64 20 6f 76 65 72 66 6c 6f 77  to hold overflow
9640: 20 63 6f 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c   content.</p>..<
9650: 68 33 3e 31 2e 37 20 50 6f 69 6e 74 65 72 20 4d  h3>1.7 Pointer M
9660: 61 70 20 6f 72 20 50 74 72 6d 61 70 20 50 61 67  ap or Ptrmap Pag
9670: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 50 6f 69 6e  es</h3>..<p>Poin
9680: 74 65 72 20 6d 61 70 20 6f 72 20 70 74 72 6d 61  ter map or ptrma
9690: 70 20 70 61 67 65 73 20 61 72 65 20 65 78 74 72  p pages are extr
96a0: 61 20 70 61 67 65 73 20 69 6e 73 65 72 74 65 64  a pages inserted
96b0: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
96c0: 73 65 0a 74 6f 20 6d 61 6b 65 20 74 68 65 20 6f  se.to make the o
96d0: 70 65 72 61 74 69 6f 6e 20 6f 66 20 5b 61 75 74  peration of [aut
96e0: 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69  o_vacuum] and [i
96f0: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
9700: 6d 5d 20 6d 6f 64 65 73 0a 6d 6f 72 65 20 65 66  m] modes.more ef
9710: 66 69 63 69 65 6e 74 2e 20 20 4f 74 68 65 72 20  ficient.  Other 
9720: 70 61 67 65 20 74 79 70 65 73 20 69 6e 20 74 68  page types in th
9730: 65 20 64 61 74 61 62 61 73 65 20 74 79 70 69 63  e database typic
9740: 61 6c 6c 79 20 68 61 76 65 20 70 6f 69 6e 74 65  ally have pointe
9750: 72 73 0a 66 72 6f 6d 20 70 61 72 65 6e 74 20 74  rs.from parent t
9760: 6f 20 63 68 69 6c 64 2e 20 20 46 6f 72 20 65 78  o child.  For ex
9770: 61 6d 70 6c 65 2c 20 61 6e 20 69 6e 74 65 72 69  ample, an interi
9780: 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 20 63  or b-tree page c
9790: 6f 6e 74 61 69 6e 73 20 70 6f 69 6e 74 65 72 73  ontains pointers
97a0: 0a 74 6f 20 69 74 73 20 63 68 69 6c 64 20 62 2d  .to its child b-
97b0: 74 72 65 65 20 70 61 67 65 73 20 61 6e 64 20 61  tree pages and a
97c0: 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e  n overflow chain
97d0: 20 68 61 73 20 61 20 70 6f 69 6e 74 65 72 0a 66   has a pointer.f
97e0: 72 6f 6d 20 65 61 72 6c 69 65 72 20 74 6f 20 6c  rom earlier to l
97f0: 61 74 65 72 20 6c 69 6e 6b 73 20 69 6e 20 74 68  ater links in th
9800: 65 20 63 68 61 69 6e 2e 20 20 41 20 70 74 72 6d  e chain.  A ptrm
9810: 61 70 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73  ap page contains
9820: 20 6c 69 6e 6b 61 67 65 0a 69 6e 66 6f 72 6d 61   linkage.informa
9830: 74 69 6f 6e 20 67 6f 69 6e 67 20 69 6e 20 74 68  tion going in th
9840: 65 20 6f 70 70 6f 73 69 74 65 20 64 69 72 65 63  e opposite direc
9850: 74 69 6f 6e 2c 20 66 72 6f 6d 20 63 68 69 6c 64  tion, from child
9860: 20 74 6f 20 70 61 72 65 6e 74 2e 3c 2f 70 3e 0a   to parent.</p>.
9870: 0a 3c 70 3e 5e 50 74 72 6d 61 70 20 70 61 67 65  .<p>^Ptrmap page
9880: 73 20 6d 75 73 74 20 65 78 69 73 74 20 69 6e 20  s must exist in 
9890: 61 6e 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  any database fil
98a0: 65 20 77 68 69 63 68 20 68 61 73 20 61 20 6e 6f  e which has a no
98b0: 6e 2d 7a 65 72 6f 0a 6c 61 72 67 65 73 74 20 72  n-zero.largest r
98c0: 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 20  oot b-tree page 
98d0: 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20  value at offset 
98e0: 35 32 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  52 in the databa
98f0: 73 65 20 68 65 61 64 65 72 2e 0a 5e 49 66 20 74  se header..^If t
9900: 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20  he largest root 
9910: 62 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75  b-tree page valu
9920: 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  e is zero, then 
9930: 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 75 73  the database mus
9940: 74 20 6e 6f 74 0a 63 6f 6e 74 61 69 6e 20 70 74  t not.contain pt
9950: 72 6d 61 70 20 70 61 67 65 73 2e 3c 2f 70 3e 0a  rmap pages.</p>.
9960: 0a 3c 70 3e 5e 49 6e 20 61 20 64 61 74 61 62 61  .<p>^In a databa
9970: 73 65 20 77 69 74 68 20 70 74 72 6d 61 70 20 70  se with ptrmap p
9980: 61 67 65 73 2c 20 74 68 65 20 66 69 72 73 74 20  ages, the first 
9990: 70 74 72 6d 61 70 20 70 61 67 65 20 69 73 20 70  ptrmap page is p
99a0: 61 67 65 20 32 2e 0a 41 20 70 74 72 6d 61 70 20  age 2..A ptrmap 
99b0: 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  page consists of
99c0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 35 2d 62   an array of 5-b
99d0: 79 74 65 20 65 6e 74 72 69 65 73 2e 20 20 4c 65  yte entries.  Le
99e0: 74 20 4a 20 62 65 20 74 68 65 0a 6e 75 6d 62 65  t J be the.numbe
99f0: 72 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72  r of 5-byte entr
9a00: 69 65 73 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ies that will fi
9a10: 74 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20  t in the usable 
9a20: 73 70 61 63 65 20 6f 66 20 61 20 70 61 67 65 2e  space of a page.
9a30: 0a 28 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  .(In other words
9a40: 2c 20 4a 3d 55 2f 35 2e 29 20 20 5e 54 68 65 20  , J=U/5.)  ^The 
9a50: 66 69 72 73 74 20 70 74 72 6d 61 70 20 70 61 67  first ptrmap pag
9a60: 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 62  e will contain b
9a70: 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66 6f  ack pointer.info
9a80: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67 65  rmation for page
9a90: 73 20 33 20 74 68 72 6f 75 67 68 20 4a 2b 32 2c  s 3 through J+2,
9aa0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 5e 54 68   inclusive.  ^Th
9ab0: 65 20 73 65 63 6f 6e 64 20 70 6f 69 6e 74 65 72  e second pointer
9ac0: 20 6d 61 70 0a 70 61 67 65 20 77 69 6c 6c 20 62   map.page will b
9ad0: 65 20 6f 6e 20 70 61 67 65 20 4a 2b 33 20 61 6e  e on page J+3 an
9ae0: 64 20 74 68 61 74 20 70 74 72 6d 61 70 20 70 61  d that ptrmap pa
9af0: 67 65 20 77 69 6c 6c 20 70 72 6f 76 69 64 65 20  ge will provide 
9b00: 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e 66  back pointer.inf
9b10: 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61 67  ormation for pag
9b20: 65 73 20 4a 2b 34 20 74 68 72 6f 75 67 68 20 32  es J+4 through 2
9b30: 2a 4a 2b 33 20 69 6e 63 6c 75 73 69 76 65 2e 20  *J+3 inclusive. 
9b40: 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 20 66 6f   And so forth fo
9b50: 72 0a 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  r.the entire dat
9b60: 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
9b70: 0a 3c 70 3e 5e 28 49 6e 20 61 20 64 61 74 61 62  .<p>^(In a datab
9b80: 61 73 65 20 74 68 61 74 20 75 73 65 73 20 70 74  ase that uses pt
9b90: 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20  rmap pages, all 
9ba0: 70 61 67 65 73 20 61 74 20 6c 6f 63 61 74 69 6f  pages at locatio
9bb0: 6e 73 20 69 64 65 6e 74 69 66 69 65 64 0a 62 79  ns identified.by
9bc0: 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e   the computation
9bd0: 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
9be0: 20 70 61 72 61 67 72 61 70 68 20 6d 75 73 74 20   paragraph must 
9bf0: 62 65 20 70 74 72 6d 61 70 20 70 61 67 65 20 61  be ptrmap page a
9c00: 6e 64 20 6e 6f 0a 6f 74 68 65 72 20 70 61 67 65  nd no.other page
9c10: 20 6d 61 79 20 62 65 20 61 20 70 74 72 6d 61 70   may be a ptrmap
9c20: 20 70 61 67 65 2e 20 20 45 78 63 65 70 74 2c 20   page.  Except, 
9c30: 69 66 20 74 68 65 20 62 79 74 65 2d 6c 6f 63 6b  if the byte-lock
9c40: 20 70 61 67 65 20 68 61 70 70 65 6e 73 20 74 6f   page happens to
9c50: 0a 66 61 6c 6c 20 6f 6e 20 74 68 65 20 73 61 6d  .fall on the sam
9c60: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 61 73  e page number as
9c70: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 2c 20   a ptrmap page, 
9c80: 74 68 65 6e 20 74 68 65 20 70 74 72 6d 61 70 20  then the ptrmap 
9c90: 69 73 20 6d 6f 76 65 64 0a 74 6f 20 74 68 65 20  is moved.to the 
9ca0: 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 67 65 20 66  following page f
9cb0: 6f 72 20 74 68 61 74 20 6f 6e 65 20 63 61 73 65  or that one case
9cc0: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68  .)^</p>..<p>Each
9cd0: 20 35 2d 62 79 74 65 20 65 6e 74 72 79 20 6f 6e   5-byte entry on
9ce0: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 20 70   a ptrmap page p
9cf0: 72 6f 76 69 64 65 73 20 62 61 63 6b 2d 6c 69 6e  rovides back-lin
9d00: 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  k information ab
9d10: 6f 75 74 20 0a 6f 6e 65 20 6f 66 20 70 61 67 65  out .one of page
9d20: 73 20 74 68 61 74 20 69 6d 6d 65 64 69 61 74 65  s that immediate
9d30: 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f  ly follow the po
9d40: 69 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28 49 66  inter map.  ^(If
9d50: 20 70 61 67 65 20 42 20 69 73 20 61 0a 70 74 72   page B is a.ptr
9d60: 6d 61 70 20 70 61 67 65 20 74 68 65 6e 20 62 61  map page then ba
9d70: 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74  ck-link informat
9d80: 69 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42  ion about page B
9d90: 2b 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 62  +1 is provided b
9da0: 79 0a 74 68 65 20 66 69 72 73 74 20 65 6e 74 72  y.the first entr
9db0: 79 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74 65 72  y on the pointer
9dc0: 20 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69   map.  Informati
9dd0: 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b  on about page B+
9de0: 32 20 69 73 0a 70 72 6f 76 69 64 65 64 20 62 79  2 is.provided by
9df0: 20 74 68 65 20 73 65 63 6f 6e 64 20 65 6e 74 72   the second entr
9e00: 79 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68  y.  And so forth
9e10: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68  .)^</p>..<p>Each
9e20: 20 35 2d 62 79 74 65 20 70 74 72 6d 61 70 20 65   5-byte ptrmap e
9e30: 6e 74 72 79 20 63 6f 6e 73 69 73 74 73 20 6f 66  ntry consists of
9e40: 20 6f 6e 65 20 62 79 74 65 20 6f 66 20 22 70 61   one byte of "pa
9e50: 67 65 20 74 79 70 65 22 20 69 6e 66 6f 72 6d 61  ge type" informa
9e60: 74 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79  tion.followed by
9e70: 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
9e80: 64 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72  dian page number
9e90: 2e 20 20 46 69 76 65 20 70 61 67 65 20 74 79 70  .  Five page typ
9ea0: 65 73 20 61 72 65 20 72 65 63 6f 67 6e 69 7a 65  es are recognize
9eb0: 64 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  d:.</p>..<ol>.<l
9ec0: 69 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f 74 20  i>A b-tree root 
9ed0: 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20  page.  The.page 
9ee0: 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65  number should be
9ef0: 20 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65   zero..<li>A fre
9f00: 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 65  elist page.  The
9f10: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f   page number sho
9f20: 75 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69  uld be.zero..<li
9f30: 3e 54 68 65 20 66 69 72 73 74 20 70 61 67 65 20  >The first page 
9f40: 6f 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61  of a.cell payloa
9f50: 64 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e  d overflow chain
9f60: 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62  .  The page numb
9f70: 65 72 20 69 73 20 74 68 65 20 62 2d 74 72 65 65  er is the b-tree
9f80: 20 70 61 67 65 20 74 68 61 74 0a 63 6f 6e 74 61   page that.conta
9f90: 69 6e 73 20 74 68 65 20 63 65 6c 6c 20 77 68 6f  ins the cell who
9fa0: 73 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f  se content has o
9fb0: 76 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41  verflowed..<li>A
9fc0: 20 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65 72   page in an over
9fd0: 66 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68 65 72  flow chain.other
9fe0: 20 74 68 61 6e 20 74 68 65 20 66 69 72 73 74 20   than the first 
9ff0: 70 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20  page.  The page 
a000: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 72  number is the pr
a010: 69 6f 72 20 70 61 67 65 20 6f 66 20 74 68 65 0a  ior page of the.
a020: 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a  overflow chain..
a030: 3c 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62  <li>A non-root b
a040: 2d 74 72 65 65 20 70 61 67 65 2e 20 20 54 68 65  -tree page.  The
a050: 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20  .page number is 
a060: 74 68 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65  the parent b-tre
a070: 65 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  e page..</ol>..<
a080: 70 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61 62 61  p>^In any databa
a090: 73 65 20 66 69 6c 65 20 74 68 61 74 20 63 6f 6e  se file that con
a0a0: 74 61 69 6e 73 20 70 74 72 6d 61 70 20 70 61 67  tains ptrmap pag
a0b0: 65 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65 20 72  es, all b-tree r
a0c0: 6f 6f 74 20 70 61 67 65 73 20 0a 6d 75 73 74 20  oot pages .must 
a0d0: 63 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e 79 20  come before any 
a0e0: 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20  non-root b-tree 
a0f0: 70 61 67 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f  page, cell paylo
a100: 61 64 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  ad overflow page
a110: 2c 20 6f 72 0a 66 72 65 65 6c 69 73 74 20 70 61  , or.freelist pa
a120: 67 65 2e 20 20 54 68 69 73 20 72 65 73 74 72 69  ge.  This restri
a130: 63 74 69 6f 6e 20 65 6e 73 75 72 65 73 20 74 68  ction ensures th
a140: 61 74 20 61 20 72 6f 6f 74 20 70 61 67 65 20 77  at a root page w
a150: 69 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76  ill never.be mov
a160: 65 64 20 64 75 72 69 6e 67 20 61 6e 20 61 75 74  ed during an aut
a170: 6f 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72  o-vacuum or incr
a180: 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20  emental-vacuum. 
a190: 20 54 68 65 20 61 75 74 6f 2d 76 61 63 75 75 6d   The auto-vacuum
a1a0: 0a 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f 74 20  .logic does not 
a1b0: 6b 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70 64 61  know how to upda
a1c0: 74 65 20 74 68 65 20 72 6f 6f 74 5f 70 61 67 65  te the root_page
a1d0: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71   field of the sq
a1e0: 6c 69 74 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c  lite_master.tabl
a1f0: 65 20 61 6e 64 20 73 6f 20 69 74 20 69 73 20 6e  e and so it is n
a200: 65 63 65 73 73 61 72 79 20 74 6f 20 70 72 65 76  ecessary to prev
a210: 65 6e 74 20 72 6f 6f 74 20 70 61 67 65 73 20 66  ent root pages f
a220: 72 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a  rom being moved.
a230: 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76  during an auto-v
a240: 61 63 75 75 6d 20 69 6e 20 6f 72 64 65 72 20 74  acuum in order t
a250: 6f 20 70 72 65 73 65 72 76 65 20 74 68 65 20 69  o preserve the i
a260: 6e 74 65 67 72 69 74 79 20 6f 66 20 74 68 65 0a  ntegrity of the.
a270: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
a280: 62 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65  ble.  ^Root page
a290: 73 20 61 72 65 20 6d 6f 76 65 64 20 74 6f 20 74  s are moved to t
a2a0: 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
a2b0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c  the.database fil
a2c0: 65 20 62 79 20 74 68 65 20 43 52 45 41 54 45 20  e by the CREATE 
a2d0: 54 41 42 4c 45 2c 20 43 52 45 41 54 45 20 49 4e  TABLE, CREATE IN
a2e0: 44 45 58 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c  DEX, DROP TABLE,
a2f0: 20 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45 58 20   and.DROP INDEX 
a300: 6f 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a  operations.</p>.
a310: 0a 3c 68 32 3e 32 2e 30 20 53 63 68 65 6d 61 20  .<h2>2.0 Schema 
a320: 4c 61 79 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54  Layer</h2>..<p>T
a330: 68 65 20 66 6f 72 65 67 6f 69 6e 67 20 74 65 78  he foregoing tex
a340: 74 20 64 65 73 63 72 69 62 65 73 20 6c 6f 77 2d  t describes low-
a350: 6c 65 76 65 6c 20 61 73 70 65 63 74 73 20 6f 66  level aspects of
a360: 20 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65   the SQLite file
a370: 0a 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 62 2d  .format.  The b-
a380: 74 72 65 65 20 6d 65 63 68 61 6e 69 73 6d 20 70  tree mechanism p
a390: 72 6f 76 69 64 65 73 20 61 20 70 6f 77 65 72 66  rovides a powerf
a3a0: 75 6c 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74  ul and efficient
a3b0: 20 6d 65 61 6e 73 20 6f 66 0a 61 63 63 65 73 73   means of.access
a3c0: 69 6e 67 20 61 20 6c 61 72 67 65 20 64 61 74 61  ing a large data
a3d0: 20 73 65 74 2e 20 20 54 68 69 73 20 73 65 63 74   set.  This sect
a3e0: 69 6f 6e 20 77 69 6c 6c 20 64 65 73 63 72 69 62  ion will describ
a3f0: 65 20 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c 65  e how the.low-le
a400: 76 65 6c 20 62 2d 74 72 65 65 20 6c 61 79 65 72  vel b-tree layer
a410: 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
a420: 65 6d 65 6e 74 20 68 69 67 68 65 72 2d 6c 65 76  ement higher-lev
a430: 65 6c 20 53 51 4c 0a 63 61 70 61 62 69 6c 69 74  el SQL.capabilit
a440: 69 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ies.</p>..<tcl>h
a450: 64 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 6f 72  d_fragment recor
a460: 64 5f 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72 64  d_format {record
a470: 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c   format}</tcl>.<
a480: 68 33 3e 32 2e 31 20 52 65 63 6f 72 64 20 46 6f  h3>2.1 Record Fo
a490: 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  rmat</h3>..<p>Th
a4a0: 65 20 64 61 74 61 20 66 6f 72 20 61 20 74 61 62  e data for a tab
a4b0: 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70  le b-tree leaf p
a4c0: 61 67 65 20 61 6e 64 20 74 68 65 20 6b 65 79 0a  age and the key.
a4d0: 6f 66 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  of an index b-tr
a4e0: 65 65 20 70 61 67 65 20 77 61 73 20 63 68 61 72  ee page was char
a4f0: 61 63 74 65 72 69 7a 65 64 20 61 62 6f 76 65 0a  acterized above.
a500: 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
a510: 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65  sequence of byte
a520: 73 2e 0a 54 68 65 20 70 72 69 6f 72 20 64 69 73  s..The prior dis
a530: 63 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65  cussion mentione
a540: 64 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67 20  d one key being 
a550: 6c 65 73 73 20 74 68 61 6e 20 61 6e 6f 74 68 65  less than anothe
a560: 72 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74 20 64  r, but.did not d
a570: 65 66 69 6e 65 20 77 68 61 74 20 22 6c 65 73 73  efine what "less
a580: 20 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20 54   than" meant.  T
a590: 68 65 20 63 75 72 72 65 6e 74 20 73 65 63 74 69  he current secti
a5a0: 6f 6e 20 77 69 6c 6c 20 61 64 64 72 65 73 73 0a  on will address.
a5b0: 74 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e 73 2e  these omissions.
a5c0: 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64  </p>..<p>Payload
a5d0: 2c 20 65 69 74 68 65 72 20 74 61 62 6c 65 20 62  , either table b
a5e0: 2d 74 72 65 65 20 64 61 74 61 20 6f 72 20 69 6e  -tree data or in
a5f0: 64 65 78 20 62 2d 74 72 65 65 20 6b 65 79 73 2c  dex b-tree keys,
a600: 20 0a 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74   .is always in t
a610: 68 65 20 22 72 65 63 6f 72 64 20 66 6f 72 6d 61  he "record forma
a620: 74 22 2e 0a 54 68 65 20 72 65 63 6f 72 64 20 66  t"..The record f
a630: 6f 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20  ormat defines a 
a640: 73 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75  sequence of valu
a650: 65 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es corresponding
a660: 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61  .to columns in a
a670: 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
a680: 20 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72    The record for
a690: 6d 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  mat specifies th
a6a0: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75  e number.of colu
a6b0: 6d 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79 70  mns, the datatyp
a6c0: 65 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  e of each column
a6d0: 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  , and the conten
a6e0: 74 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  t of each column
a6f0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65  .</p>..<p>The re
a700: 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b 65  cord format make
a710: 73 20 65 78 74 65 6e 73 69 76 65 20 75 73 65 20  s extensive use 
a720: 6f 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62 6c  of the .[variabl
a730: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
a740: 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72 65  ] or [varint].re
a750: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
a760: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
a770: 74 65 67 65 72 73 20 64 65 66 69 6e 65 64 20 61  tegers defined a
a780: 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  bove.</p>..<tcl>
a790: 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72 69  hd_fragment seri
a7a0: 61 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20 74  altype {serial t
a7b0: 79 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79 70  ype} {serial typ
a7c0: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72  es}</tcl>.<p>A r
a7d0: 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 61  ecord contains a
a7e0: 20 68 65 61 64 65 72 20 61 6e 64 20 61 20 62 6f   header and a bo
a7f0: 64 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64 65  dy, in that orde
a800: 72 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64 65  r.  .^(The heade
a810: 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
a820: 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77 68  single varint wh
a830: 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74  ich determines t
a840: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 0a  he total number.
a850: 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
a860: 68 65 61 64 65 72 2e 20 20 54 68 65 20 76 61 72  header.  The var
a870: 69 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68 65  int value is the
a880: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61   size of the hea
a890: 64 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e 63  der in.bytes inc
a8a0: 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20  luding the size 
a8b0: 76 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29 5e  varint itself.)^
a8c0: 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65    ^Following the
a8d0: 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
a8e0: 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64 64  .one or more add
a8f0: 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
a900: 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
a910: 20 20 54 68 65 73 65 20 61 64 64 69 74 69 6f 6e    These addition
a920: 61 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20 63  al varints.are c
a930: 61 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74 79  alled "serial ty
a940: 70 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a  pe" numbers and.
a950: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 61  determine the da
a960: 74 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63  tatype of each c
a970: 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67  olumn, according
a980: 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
a990: 67 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63  g chart:</p>..<c
a9a0: 65 6e 74 65 72 3e 0a 3c 69 3e 53 65 72 69 61 6c  enter>.<i>Serial
a9b0: 20 54 79 70 65 20 43 6f 64 65 73 20 4f 66 20 54   Type Codes Of T
a9c0: 68 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74  he Record Format
a9d0: 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
a9e0: 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
a9f0: 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 53 65  er=1>.<tr><th>Se
aa00: 72 69 61 6c 20 54 79 70 65 3c 74 68 3e 43 6f 6e  rial Type<th>Con
aa10: 74 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d 65 61  tent Size<th>Mea
aa20: 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ning.<tr><td val
aa30: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
aa40: 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e  nter>0<td valign
aa50: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
aa60: 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>0<td align=lef
aa70: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 4e  t>.^Value is a N
aa80: 55 4c 4c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ULL..<tr><td val
aa90: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
aaa0: 6e 74 65 72 3e 31 3c 74 64 20 76 61 6c 69 67 6e  nter>1<td valign
aab0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
aac0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
aad0: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 6e 20  t>.^Value is an 
aae0: 38 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  8-bit twos-compl
aaf0: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c  ement integer..<
ab00: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
ab10: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
ab20: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ab30: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64  lign=center>2<td
ab40: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
ab50: 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64  lue is a big-end
ab60: 69 61 6e 20 31 36 2d 62 69 74 20 74 77 6f 73 2d  ian 16-bit twos-
ab70: 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67  complement integ
ab80: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
ab90: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
aba0: 74 65 72 3e 33 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>3<td valign=
abb0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
abc0: 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >3<td align=left
abd0: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69  >.^Value is a bi
abe0: 67 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20  g-endian 24-bit 
abf0: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
ac00: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
ac10: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
ac20: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61  n=center>4<td va
ac30: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
ac40: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
ac50: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
ac60: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32   a big-endian 32
ac70: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
ac80: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
ac90: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
aca0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c   align=center>5<
acb0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
acc0: 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20  ign=center>6<td 
acd0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
ace0: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
acf0: 61 6e 20 34 38 2d 62 69 74 20 74 77 6f 73 2d 63  an 48-bit twos-c
ad00: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
ad10: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
ad20: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ad30: 65 72 3e 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>6<td valign=t
ad40: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ad50: 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  8<td align=left>
ad60: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
ad70: 2d 65 6e 64 69 61 6e 20 36 34 2d 62 69 74 20 74  -endian 64-bit t
ad80: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
ad90: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
ada0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
adb0: 3d 63 65 6e 74 65 72 3e 37 3c 74 64 20 76 61 6c  =center>7<td val
adc0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
add0: 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  nter>8<td align=
ade0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
adf0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 49 45 45  a big-endian IEE
ae00: 45 20 37 35 34 2d 32 30 30 38 20 36 34 2d 62 69  E 754-2008 64-bi
ae10: 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  t floating point
ae20: 20 6e 75 6d 62 65 72 2e 0a 3c 74 72 3e 3c 74 64   number..<tr><td
ae30: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
ae40: 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61  n=center>8<td va
ae50: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
ae60: 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e  enter>0<td align
ae70: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
ae80: 20 74 68 65 20 69 6e 74 65 67 65 72 20 30 2e 20   the integer 0. 
ae90: 28 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20  (Only available 
aea0: 66 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d  for [schema form
aeb0: 61 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65 72  at] 4 and higher
aec0: 2e 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  .).<tr><td valig
aed0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
aee0: 65 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>9<td valign=t
aef0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
af00: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
af10: 0a 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69  .^Value is the i
af20: 6e 74 65 67 65 72 20 31 2e 20 28 4f 6e 6c 79 20  nteger 1. (Only 
af30: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73  available for [s
af40: 63 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20  chema format] 4 
af50: 61 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72  and higher.).<tr
af60: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
af70: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 30 2c  align=center>10,
af80: 31 31 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  11.    <td valig
af90: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
afa0: 65 72 3e 26 6e 62 73 70 3b 3c 74 64 20 61 6c 69  er>&nbsp;<td ali
afb0: 67 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20  gn=left>.<i>Not 
afc0: 75 73 65 64 2e 20 20 52 65 73 65 72 76 65 64 20  used.  Reserved 
afd0: 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f  for expansion.</
afe0: 69 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  i>.<tr><td valig
aff0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b000: 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 32 20 61  er>N&#x2265;12 a
b010: 6e 64 20 65 76 65 6e 0a 20 20 20 20 3c 74 64 20  nd even.    <td 
b020: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b030: 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 32 29 2f 32  =center>(N-12)/2
b040: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
b050: 5e 56 61 6c 75 65 20 69 73 20 61 20 42 4c 4f 42  ^Value is a BLOB
b060: 20 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f   that is (N-12)/
b070: 32 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74  2 bytes in lengt
b080: 68 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  h..<tr><td valig
b090: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b0a0: 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61  er>N&#x2265;13 a
b0b0: 6e 64 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76  nd odd.    <td v
b0c0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b0d0: 63 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c  center>(N-13)/2<
b0e0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
b0f0: 56 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  Value is a strin
b100: 67 20 69 6e 20 74 68 65 20 5b 74 65 78 74 20 65  g in the [text e
b110: 6e 63 6f 64 69 6e 67 5d 20 61 6e 64 20 28 4e 2d  ncoding] and (N-
b120: 31 33 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c  13)/2 bytes in l
b130: 65 6e 67 74 68 2e 0a 5e 54 68 65 20 6e 75 6c 20  ength..^The nul 
b140: 74 65 72 6d 69 6e 61 74 6f 72 20 69 73 20 6e 6f  terminator is no
b150: 74 20 73 74 6f 72 65 64 2e 0a 3c 2f 74 61 62 6c  t stored..</tabl
b160: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  e></center>..<p>
b170: 4e 6f 74 65 20 74 68 61 74 20 62 65 63 61 75 73  Note that becaus
b180: 65 20 6f 66 20 74 68 65 20 77 61 79 20 76 61 72  e of the way var
b190: 69 6e 74 73 20 61 72 65 20 64 65 66 69 6e 65 64  ints are defined
b1a0: 2c 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a  , the header siz
b1b0: 65 20 76 61 72 69 6e 74 0a 61 6e 64 20 73 65 72  e varint.and ser
b1c0: 69 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73  ial type varints
b1d0: 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 63 6f   will usually co
b1e0: 6e 73 69 73 74 20 6f 66 20 61 20 73 69 6e 67 6c  nsist of a singl
b1f0: 65 20 62 79 74 65 2e 20 20 54 68 65 0a 73 65 72  e byte.  The.ser
b200: 69 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73  ial type varints
b210: 20 66 6f 72 20 6c 61 72 67 65 20 73 74 72 69 6e   for large strin
b220: 67 73 20 61 6e 64 20 42 4c 4f 42 73 20 6d 69 67  gs and BLOBs mig
b230: 68 74 20 65 78 74 65 6e 64 20 74 6f 20 74 77 6f  ht extend to two
b240: 20 6f 72 20 74 68 72 65 65 0a 62 79 74 65 20 76   or three.byte v
b250: 61 72 69 6e 74 73 2c 20 62 75 74 20 74 68 61 74  arints, but that
b260: 20 69 73 20 74 68 65 20 65 78 63 65 70 74 69 6f   is the exceptio
b270: 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  n rather than th
b280: 65 20 72 75 6c 65 2e 20 0a 54 68 65 20 76 61 72  e rule. .The var
b290: 69 6e 74 20 66 6f 72 6d 61 74 20 69 73 20 76 65  int format is ve
b2a0: 72 79 20 65 66 66 69 63 69 65 6e 74 20 61 74 20  ry efficient at 
b2b0: 63 6f 64 69 6e 67 20 74 68 65 20 72 65 63 6f 72  coding the recor
b2c0: 64 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  d header.</p>..<
b2d0: 70 3e 5e 54 68 65 20 76 61 6c 75 65 73 20 66 6f  p>^The values fo
b2e0: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
b2f0: 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
b300: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74  diately follow t
b310: 68 65 20 68 65 61 64 65 72 2e 0a 5e 28 4e 6f 74  he header..^(Not
b320: 65 20 74 68 61 74 20 66 6f 72 20 73 65 72 69 61  e that for seria
b330: 6c 20 74 79 70 65 73 20 30 2c 20 38 2c 20 39 2c  l types 0, 8, 9,
b340: 20 31 32 2c 20 61 6e 64 20 31 33 2c 20 74 68 65   12, and 13, the
b350: 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 20 62   value is zero b
b360: 79 74 65 73 20 69 6e 0a 6c 65 6e 67 74 68 2e 20  ytes in.length. 
b370: 20 49 66 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20   If all columns 
b380: 61 72 65 20 6f 66 20 74 68 65 73 65 20 74 79 70  are of these typ
b390: 65 73 20 74 68 65 6e 20 74 68 65 20 62 6f 64 79  es then the body
b3a0: 20 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 0a   section of the.
b3b0: 72 65 63 6f 72 64 20 69 73 20 65 6d 70 74 79 2e  record is empty.
b3c0: 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 32 20  )^</p>..<h3>2.2 
b3d0: 52 65 63 6f 72 64 20 53 6f 72 74 20 4f 72 64 65  Record Sort Orde
b3e0: 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 6f  r</h3>..<p>The o
b3f0: 72 64 65 72 20 6f 66 20 6b 65 79 73 20 69 6e 20  rder of keys in 
b400: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
b410: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
b420: 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20   the sort order 
b430: 6f 66 0a 74 68 65 20 72 65 63 6f 72 64 73 20 74  of.the records t
b440: 68 61 74 20 74 68 65 20 6b 65 79 73 20 72 65 70  hat the keys rep
b450: 72 65 73 65 6e 74 2e 20 20 52 65 63 6f 72 64 20  resent.  Record 
b460: 63 6f 6d 70 61 72 69 73 6f 6e 20 70 72 6f 67 72  comparison progr
b470: 65 73 73 65 73 20 63 6f 6c 75 6d 6e 0a 62 79 20  esses column.by 
b480: 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75 6d 6e 73  column.  Columns
b490: 20 6f 66 20 61 20 72 65 63 6f 72 64 20 61 72 65   of a record are
b4a0: 20 65 78 61 6d 69 6e 65 64 20 66 72 6f 6d 20 6c   examined from l
b4b0: 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 54  eft to right.  T
b4c0: 68 65 0a 66 69 72 73 74 20 70 61 69 72 20 6f 66  he.first pair of
b4d0: 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
b4e0: 65 20 6e 6f 74 20 65 71 75 61 6c 20 64 65 74 65  e not equal dete
b4f0: 72 6d 69 6e 65 73 20 74 68 65 20 72 65 6c 61 74  rmines the relat
b500: 69 76 65 20 6f 72 64 65 72 0a 6f 66 20 74 68 65  ive order.of the
b510: 20 74 77 6f 20 72 65 63 6f 72 64 73 2e 20 20 54   two records.  T
b520: 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f 66  he sort order of
b530: 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75   individual colu
b540: 6d 6e 73 20 69 73 20 61 73 0a 66 6f 6c 6c 6f 77  mns is as.follow
b550: 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  s:</p>..<ol>.<li
b560: 3e 5e 28 4e 55 4c 4c 20 76 61 6c 75 65 73 20 28  >^(NULL values (
b570: 73 65 72 69 61 6c 20 74 79 70 65 20 30 29 20 73  serial type 0) s
b580: 6f 72 74 20 66 69 72 73 74 2e 29 5e 0a 3c 6c 69  ort first.)^.<li
b590: 3e 5e 28 4e 75 6d 65 72 69 63 20 76 61 6c 75 65  >^(Numeric value
b5a0: 73 20 28 73 65 72 69 61 6c 20 74 79 70 65 73 20  s (serial types 
b5b0: 31 20 74 68 72 6f 75 67 68 20 39 29 20 73 6f 72  1 through 9) sor
b5c0: 74 20 61 66 74 65 72 20 4e 55 4c 4c 73 0a 20 20  t after NULLs.  
b5d0: 20 20 20 20 61 6e 64 20 69 6e 20 6e 75 6d 65 72      and in numer
b5e0: 69 63 20 6f 72 64 65 72 2e 29 5e 0a 3c 6c 69 3e  ic order.)^.<li>
b5f0: 5e 28 54 65 78 74 20 76 61 6c 75 65 73 20 28 6f  ^(Text values (o
b600: 64 64 20 73 65 72 69 61 6c 20 74 79 70 65 73 20  dd serial types 
b610: 31 33 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73  13 and larger) s
b620: 6f 72 74 20 61 66 74 65 72 20 6e 75 6d 65 72 69  ort after numeri
b630: 63 0a 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20  c.    values in 
b640: 74 68 65 20 6f 72 64 65 72 20 64 65 74 65 72 6d  the order determ
b650: 69 6e 65 64 20 62 79 20 74 68 65 20 63 6f 6c 75  ined by the colu
b660: 6d 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66  mns [collating f
b670: 75 6e 63 74 69 6f 6e 5d 2e 29 5e 0a 3c 6c 69 3e  unction].)^.<li>
b680: 5e 28 42 4c 4f 42 20 76 61 6c 75 65 73 20 28 65  ^(BLOB values (e
b690: 76 65 6e 20 73 65 72 69 61 6c 20 74 79 70 65 73  ven serial types
b6a0: 20 31 32 20 61 6e 64 20 6c 61 72 67 65 72 29 20   12 and larger) 
b6b0: 73 6f 72 74 20 6c 61 73 74 20 61 6e 64 20 69 6e  sort last and in
b6c0: 20 74 68 65 20 6f 72 64 65 72 20 0a 20 20 20 20   the order .    
b6d0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6d 65  determined by me
b6e0: 6d 63 6d 70 28 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a  mcmp().)^.</ol>.
b6f0: 0a 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74 69 6e 67  .<p>A [collating
b700: 20 66 75 6e 63 74 69 6f 6e 5d 20 66 6f 72 20 65   function] for e
b710: 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 65  ach column is ne
b720: 63 65 73 73 61 72 79 20 69 6e 20 6f 72 64 65 72  cessary in order
b730: 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20   to compute.the 
b740: 6f 72 64 65 72 20 6f 66 20 74 65 78 74 20 66 69  order of text fi
b750: 65 6c 64 73 2e 0a 5e 28 53 51 4c 69 74 65 20 64  elds..^(SQLite d
b760: 65 66 69 6e 65 73 20 74 68 72 65 65 20 62 75 69  efines three bui
b770: 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20  lt-in collating 
b780: 66 75 6e 63 74 69 6f 6e 73 3a 29 5e 0a 3c 2f 70  functions:)^.</p
b790: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
b7a0: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63  table border=0 c
b7b0: 65 6c 6c 73 70 61 63 69 6e 67 3d 31 30 3e 0a 3c  ellspacing=10>.<
b7c0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b7d0: 70 3e 42 49 4e 41 52 59 0a 20 20 20 20 3c 74 64  p>BINARY.    <td
b7e0: 3e 20 5e 28 54 68 65 20 62 75 69 6c 74 2d 69 6e  > ^(The built-in
b7f0: 20 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6f   BINARY collatio
b800: 6e 20 63 6f 6d 70 61 72 65 73 20 73 74 72 69 6e  n compares strin
b810: 67 73 20 62 79 74 65 20 62 79 20 62 79 74 65 0a  gs byte by byte.
b820: 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 74 68          using th
b830: 65 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74  e memcmp() funct
b840: 69 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f 6d  ion.        from
b850: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20   the standard C 
b860: 6c 69 62 72 61 72 79 2e 29 5e 0a 3c 74 72 3e 3c  library.)^.<tr><
b870: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f  td valign=top>NO
b880: 43 41 53 45 0a 20 20 20 20 3c 74 64 3e 20 5e 28  CASE.    <td> ^(
b890: 54 68 65 20 4e 4f 43 41 53 45 20 63 6f 6c 6c 61  The NOCASE colla
b8a0: 74 69 6f 6e 20 69 73 20 6c 69 6b 65 20 42 49 4e  tion is like BIN
b8b0: 41 52 59 20 65 78 63 65 70 74 20 74 68 61 74 20  ARY except that 
b8c0: 75 70 70 65 72 63 61 73 65 0a 20 20 20 20 20 20  uppercase.      
b8d0: 20 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65    ASCII characte
b8e0: 72 73 20 28 27 41 27 20 74 68 72 6f 75 67 68 20  rs ('A' through 
b8f0: 27 5a 27 29 0a 20 20 20 20 20 20 20 20 61 72 65  'Z').        are
b900: 20 66 6f 6c 64 65 64 20 69 6e 74 6f 20 74 68 65   folded into the
b910: 69 72 20 6c 6f 77 65 72 63 61 73 65 20 65 71 75  ir lowercase equ
b920: 69 76 61 6c 65 6e 74 73 20 70 72 69 6f 72 20 74  ivalents prior t
b930: 6f 20 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20 20  o running the.  
b940: 20 20 20 20 20 20 63 6f 6d 70 61 72 69 73 6f 6e        comparison
b950: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 6f 6e 6c  .  Note that onl
b960: 79 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  y ASCII characte
b970: 72 73 20 61 72 65 20 63 61 73 65 2d 66 6f 6c 64  rs are case-fold
b980: 65 64 2e 29 5e 0a 20 20 20 20 20 20 20 20 5e 28  ed.)^.        ^(
b990: 4e 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20 64  NOCASE.        d
b9a0: 6f 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e  oes not implemen
b9b0: 74 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72 70  t a general purp
b9c0: 6f 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73 65  ose unicode case
b9d0: 6c 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  less comparison.
b9e0: 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  )^.<tr><td valig
b9f0: 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20  n=top>RTRIM.    
ba00: 3c 74 64 3e 20 5e 28 52 54 52 49 4d 20 69 73 20  <td> ^(RTRIM is 
ba10: 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65  like BINARY exce
ba20: 70 74 20 74 68 61 74 20 73 70 61 63 65 73 20 61  pt that spaces a
ba30: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
ba40: 20 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20   string.        
ba50: 61 72 65 20 65 6c 69 64 65 64 20 70 72 69 6f 72  are elided prior
ba60: 20 74 6f 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 29   to comparison.)
ba70: 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  ^.</table></bloc
ba80: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64  kquote>..<p>^Add
ba90: 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74  itional applicat
baa0: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c  ion-specific col
bab0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
bac0: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f   can be added to
bad0: 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68  .SQLite using th
bae0: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
baf0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69  e_collation()] i
bb00: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
bb10: 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  p>^The default c
bb20: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
bb30: 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
bb40: 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e 41 6c  s is BINARY..^Al
bb50: 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74  ternative collat
bb60: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f  ing functions fo
bb70: 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20  r table columns 
bb80: 63 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64  can be specified
bb90: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
bba0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
bbb0: 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41   using the COLLA
bbc0: 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65  TE clause on the
bbd0: 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   [column definit
bbe0: 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20 63 6f  ion]..^When a co
bbf0: 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c  lumn is indexed,
bc00: 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74   the same collat
bc10: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
bc20: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
bc30: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
bc40: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66  tement is used f
bc50: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  or the column in
bc60: 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64   the index, by d
bc70: 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74  efault,.though t
bc80: 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72  his can be overr
bc90: 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f  idden using a CO
bca0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
bcb0: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44  the .[CREATE IND
bcc0: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  EX] statement...
bcd0: 3c 68 33 3e 32 2e 33 20 52 65 70 72 65 73 65 6e  <h3>2.3 Represen
bce0: 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61  tation Of SQL Ta
bcf0: 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  bles</h3>..<p> ^
bd00: 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51  Each ordinary SQ
bd10: 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  L table in the d
bd20: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
bd30: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e  s represented on
bd40: 2d 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65  -disk.by a table
bd50: 20 62 2d 74 72 65 65 2e 20 20 5e 45 61 63 68 20   b-tree.  ^Each 
bd60: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62  entry in the tab
bd70: 6c 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73  le b-tree corres
bd80: 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f  ponds to a row.o
bd90: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e  f the SQL table.
bda0: 20 20 5e 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f    ^The [rowid] o
bdb0: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20  f the SQL table 
bdc0: 69 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69  is the 64-bit si
bdd0: 67 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79  gned.integer key
bde0: 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20   for each entry 
bdf0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
be00: 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  ree.</p>..<p> ^T
be10: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61  he content of ea
be20: 63 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77  ch SQL table row
be30: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
be40: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
be50: 62 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69  by.first combini
be60: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ng the values in
be70: 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c   the various col
be80: 75 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65  umns into a byte
be90: 20 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65   array.in the re
bea0: 63 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65  cord format, the
beb0: 6e 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62  n storing that b
bec0: 79 74 65 20 61 72 72 61 79 20 61 73 20 74 68 65  yte array as the
bed0: 20 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65   payload in.an e
bee0: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
bef0: 65 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20  e b-tree.  ^The 
bf00: 6f 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20  order of values 
bf10: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 73  in the record is
bf20: 0a 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65  .the same as the
bf30: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e   order of column
bf40: 73 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62  s in the SQL tab
bf50: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e  le definition..^
bf60: 57 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  When an SQL tabl
bf70: 65 20 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20  e that includes 
bf80: 61 6e 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d  an.[INTEGER PRIM
bf90: 41 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20  ARY KEY] column 
bfa0: 28 77 68 69 63 68 20 61 6c 69 61 73 65 73 20 74  (which aliases t
bfb0: 68 65 20 5b 72 6f 77 69 64 5d 29 20 74 68 65 6e  he [rowid]) then
bfc0: 20 74 68 61 74 0a 63 6f 6c 75 6d 6e 20 61 70 70   that.column app
bfd0: 65 61 72 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ears in the reco
bfe0: 72 64 20 61 73 20 61 20 4e 55 4c 4c 20 76 61 6c  rd as a NULL val
bff0: 75 65 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c  ue.  ^SQLite wil
c000: 6c 20 61 6c 77 61 79 73 20 75 73 65 0a 74 68 65  l always use.the
c010: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6b 65   table b-tree ke
c020: 79 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  y rather than th
c030: 65 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 68 65  e NULL value whe
c040: 6e 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68  n referencing th
c050: 65 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  e.[INTEGER PRIMA
c060: 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c  RY KEY] column.<
c070: 2f 70 3e 0a 0a 3c 70 3e 20 5e 49 66 20 74 68 65  /p>..<p> ^If the
c080: 20 5b 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 61   [affinity] of a
c090: 20 63 6f 6c 75 6d 6e 20 69 73 20 52 45 41 4c 20   column is REAL 
c0a0: 61 6e 64 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20  and that column 
c0b0: 63 6f 6e 74 61 69 6e 73 20 61 0a 76 61 6c 75 65  contains a.value
c0c0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 63 6f 6e   that can be con
c0d0: 76 65 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74  verted to an int
c0e0: 65 67 65 72 20 77 69 74 68 6f 75 74 20 6c 6f 73  eger without los
c0f0: 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
c100: 0a 28 69 66 20 74 68 65 20 76 61 6c 75 65 20 63  .(if the value c
c110: 6f 6e 74 61 69 6e 73 20 6e 6f 20 66 72 61 63 74  ontains no fract
c120: 69 6f 6e 61 6c 20 70 61 72 74 20 61 6e 64 20 69  ional part and i
c130: 73 20 6e 6f 74 20 74 6f 6f 20 6c 61 72 67 65 20  s not too large 
c140: 74 6f 20 62 65 0a 72 65 70 72 65 73 65 6e 74 65  to be.represente
c150: 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29  d as an integer)
c160: 20 74 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e   then the column
c170: 20 6d 61 79 20 62 65 20 73 74 6f 72 65 64 20 69   may be stored i
c180: 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 61 73 20  n the record.as 
c190: 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 5e 53 51  an integer.  ^SQ
c1a0: 4c 69 74 65 20 77 69 6c 6c 20 63 6f 6e 76 65 72  Lite will conver
c1b0: 74 20 74 68 65 20 76 61 6c 75 65 20 62 61 63 6b  t the value back
c1c0: 20 74 6f 20 66 6c 6f 61 74 69 6e 67 0a 70 6f 69   to floating.poi
c1d0: 6e 74 20 77 68 65 6e 20 65 78 74 72 61 63 74 69  nt when extracti
c1e0: 6e 67 20 69 74 20 66 72 6f 6d 20 74 68 65 20 72  ng it from the r
c1f0: 65 63 6f 72 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  ecord.</p>..<h3>
c200: 32 2e 34 20 52 65 70 72 65 73 65 6e 74 61 74 69  2.4 Representati
c210: 6f 6e 20 6f 66 20 57 49 54 48 4f 55 54 20 52 4f  on of WITHOUT RO
c220: 57 49 44 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a  WID Tables</h3>.
c230: 0a 3c 70 3e 5e 49 66 20 61 6e 20 53 51 4c 20 74  .<p>^If an SQL t
c240: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20  able is created 
c250: 75 73 69 6e 67 20 74 68 65 20 22 57 49 54 48 4f  using the "WITHO
c260: 55 54 20 52 4f 57 49 44 22 20 63 6c 61 75 73 65  UT ROWID" clause
c270: 20 61 74 20 74 68 65 0a 65 6e 64 20 6f 66 20 69   at the.end of i
c280: 74 73 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ts CREATE TABLE 
c290: 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20  statement, then 
c2a0: 74 68 61 74 20 74 61 62 6c 65 20 69 73 20 61 20  that table is a 
c2b0: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 0a  [WITHOUT ROWID].
c2c0: 74 61 62 6c 65 20 61 6e 64 20 75 73 65 73 20 61  table and uses a
c2d0: 20 64 69 66 66 65 72 65 6e 74 20 6f 6e 2d 64 69   different on-di
c2e0: 73 6b 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  sk representatio
c2f0: 6e 2e 20 20 5e 41 20 57 49 54 48 4f 55 54 20 52  n.  ^A WITHOUT R
c300: 4f 57 49 44 0a 74 61 62 6c 65 20 75 73 65 73 20  OWID.table uses 
c310: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
c320: 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 74 61  rather than a ta
c330: 62 6c 65 20 62 2d 74 72 65 65 20 66 6f 72 20 73  ble b-tree for s
c340: 74 6f 72 61 67 65 2e 0a 5e 54 68 65 20 6b 65 79  torage..^The key
c350: 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20   for each entry 
c360: 69 6e 20 74 68 65 20 57 49 54 48 4f 55 54 20 52  in the WITHOUT R
c370: 4f 57 49 44 20 62 2d 74 72 65 65 20 69 73 20 61  OWID b-tree is a
c380: 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f 73 65 64   record composed
c390: 0a 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  .of the columns 
c3a0: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
c3b0: 45 59 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  EY followed by a
c3c0: 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c  ll remaining col
c3d0: 75 6d 6e 73 20 6f 66 0a 74 68 65 20 74 61 62 6c  umns of.the tabl
c3e0: 65 2e 20 20 5e 54 68 65 20 70 72 69 6d 61 72 79  e.  ^The primary
c3f0: 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 61 70 70   key columns app
c400: 65 61 72 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ear in the order
c410: 20 74 68 65 79 20 74 68 65 79 20 77 65 72 65 0a   they they were.
c420: 64 65 63 6c 61 72 65 64 20 69 6e 20 74 68 65 20  declared in the 
c430: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75  PRIMARY KEY clau
c440: 73 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69  se and the remai
c450: 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 61 70 70  ning columns app
c460: 65 61 72 20 69 6e 0a 74 68 65 20 6f 72 64 65 72  ear in.the order
c470: 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20 74   they occur in t
c480: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  he CREATE TABLE 
c490: 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e  statement...<p>^
c4a0: 48 65 6e 63 65 2c 20 74 68 65 20 63 6f 6e 74 65  Hence, the conte
c4b0: 6e 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  nt encoding for 
c4c0: 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  a WITHOUT ROWID 
c4d0: 74 61 62 6c 65 20 69 73 20 74 68 65 20 73 61 6d  table is the sam
c4e0: 65 0a 61 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  e.as the content
c4f0: 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 61 6e   encoding for an
c500: 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20   ordinary rowid 
c510: 74 61 62 6c 65 2c 20 65 78 63 65 70 74 20 74 68  table, except th
c520: 61 74 20 74 68 65 0a 6f 72 64 65 72 20 6f 66 20  at the.order of 
c530: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 73 20 72  the columns is r
c540: 65 61 72 72 61 6e 67 65 64 20 73 6f 20 74 68 61  earranged so tha
c550: 74 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  t PRIMARY KEY co
c560: 6c 75 6d 6e 73 20 63 6f 6d 65 0a 66 69 72 73 74  lumns come.first
c570: 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  , and the conten
c580: 74 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  t is used as the
c590: 20 6b 65 79 20 69 6e 20 61 6e 20 69 6e 64 65 78   key in an index
c5a0: 20 62 2d 74 72 65 65 20 72 61 74 68 65 72 0a 74   b-tree rather.t
c5b0: 68 61 6e 20 61 73 20 74 68 65 20 64 61 74 61 20  han as the data 
c5c0: 69 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  in a table b-tre
c5d0: 65 2e 0a 5e 54 68 65 20 73 70 65 63 69 61 6c 20  e..^The special 
c5e0: 65 6e 63 6f 64 69 6e 67 20 72 75 6c 65 73 20 66  encoding rules f
c5f0: 6f 72 20 63 6f 6c 75 6d 6e 73 20 77 69 74 68 20  or columns with 
c600: 52 45 41 4c 20 61 66 66 69 6e 69 74 79 0a 61 70  REAL affinity.ap
c610: 70 6c 79 20 74 6f 20 57 49 54 48 4f 55 54 20 52  ply to WITHOUT R
c620: 4f 57 49 44 20 74 61 62 6c 65 73 20 74 68 65 20  OWID tables the 
c630: 73 61 6d 65 20 61 73 20 74 68 65 79 20 64 6f 20  same as they do 
c640: 77 69 74 68 20 72 6f 77 69 64 20 74 61 62 6c 65  with rowid table
c650: 73 2e 0a 0a 3c 68 33 3e 32 2e 35 20 52 65 70 72  s...<h3>2.5 Repr
c660: 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51  esentation Of SQ
c670: 4c 20 49 6e 64 69 63 65 73 3c 2f 68 33 3e 0a 0a  L Indices</h3>..
c680: 3c 70 3e 5e 45 61 63 68 20 53 51 4c 20 69 6e 64  <p>^Each SQL ind
c690: 65 78 2c 20 77 68 65 74 68 65 72 20 65 78 70 6c  ex, whether expl
c6a0: 69 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20  icitly declared 
c6b0: 76 69 61 20 61 20 5b 43 52 45 41 54 45 20 49 4e  via a [CREATE IN
c6c0: 44 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f  DEX] statement.o
c6d0: 72 20 69 6d 70 6c 69 65 64 20 62 79 20 61 20 55  r implied by a U
c6e0: 4e 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59  NIQUE or PRIMARY
c6f0: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c   KEY constraint,
c700: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
c710: 61 6e 20 0a 69 6e 64 65 78 20 62 2d 74 72 65 65  an .index b-tree
c720: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
c730: 20 66 69 6c 65 2e 0a 5e 45 61 63 68 20 65 6e 74   file..^Each ent
c740: 72 79 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ry in the index 
c750: 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e  b-tree correspon
c760: 64 73 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 72  ds to a single r
c770: 6f 77 20 69 6e 20 74 68 65 20 0a 61 73 73 6f 63  ow in the .assoc
c780: 69 61 74 65 64 20 53 51 4c 20 74 61 62 6c 65 2e  iated SQL table.
c790: 0a 5e 54 68 65 20 6b 65 79 20 74 6f 20 61 6e 20  .^The key to an 
c7a0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73 0a  index b-tree is.
c7b0: 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f 73 65  a record compose
c7c0: 64 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  d of the columns
c7d0: 20 74 68 61 74 20 61 72 65 20 62 65 69 6e 67 20   that are being 
c7e0: 69 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77 65 64  indexed followed
c7f0: 20 62 79 20 74 68 65 0a 6b 65 79 20 6f 66 20 74   by the.key of t
c800: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
c810: 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 46 6f 72   table row.  For
c820: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73   ordinary tables
c830: 2c 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69 73  , the row key is
c840: 0a 74 68 65 20 5b 72 6f 77 69 64 5d 2c 20 61 6e  .the [rowid], an
c850: 64 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20 52  d for [WITHOUT R
c860: 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 74 68 65  OWID] tables the
c870: 20 72 6f 77 20 6b 65 79 20 69 73 20 74 68 65 20   row key is the 
c880: 50 52 49 4d 41 52 59 20 4b 45 59 2e 0a 42 65 63  PRIMARY KEY..Bec
c890: 61 75 73 65 20 65 76 65 72 79 20 72 6f 77 20 69  ause every row i
c8a0: 6e 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20  n the table has 
c8b0: 61 20 75 6e 69 71 75 65 20 72 6f 77 20 6b 65 79  a unique row key
c8c0: 2c 0a 61 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e  ,.all keys in an
c8d0: 20 69 6e 64 65 78 20 61 72 65 20 75 6e 69 71 75   index are uniqu
c8e0: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61  e.</p>..<p>^In a
c8f0: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 78 2c 20 74   normal index, t
c900: 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f  here is a one-to
c910: 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74  -one mapping bet
c920: 77 65 65 6e 20 72 6f 77 73 20 69 6e 20 61 20 0a  ween rows in a .
c930: 74 61 62 6c 65 20 61 6e 64 20 65 6e 74 72 69 65  table and entrie
c940: 73 20 69 6e 20 65 61 63 68 20 69 6e 64 65 78 20  s in each index 
c950: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c960: 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 48 6f 77  that table..^How
c970: 65 76 65 72 2c 20 69 6e 20 61 20 5b 70 61 72 74  ever, in a [part
c980: 69 61 6c 20 69 6e 64 65 78 5d 2c 20 74 68 65 20  ial index], the 
c990: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 6f 6e 6c  index b-tree onl
c9a0: 79 20 63 6f 6e 74 61 69 6e 73 20 65 6e 74 72 69  y contains entri
c9b0: 65 73 0a 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  es.corresponding
c9c0: 20 74 6f 20 74 61 62 6c 65 20 72 6f 77 73 20 66   to table rows f
c9d0: 6f 72 20 77 68 69 63 68 20 74 68 65 20 57 48 45  or which the WHE
c9e0: 52 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73  RE clause expres
c9f0: 73 69 6f 6e 20 6f 6e 20 74 68 65 0a 43 52 45 41  sion on the.CREA
ca00: 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
ca10: 6e 74 20 69 73 20 74 72 75 65 2e 0a 5e 43 6f 72  nt is true..^Cor
ca20: 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 73 20  responding rows 
ca30: 69 6e 20 74 68 65 20 69 6e 64 65 78 20 61 6e 64  in the index and
ca40: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 73   table b-trees s
ca50: 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 72 6f  hare the same ro
ca60: 77 69 64 0a 6f 72 20 70 72 69 6d 61 72 79 20 6b  wid.or primary k
ca70: 65 79 20 76 61 6c 75 65 73 20 61 6e 64 20 63 6f  ey values and co
ca80: 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 76  ntain the same v
ca90: 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69 6e 64  alue for all ind
caa0: 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c 2f 70  exed columns.</p
cab0: 3e 0a 0a 3c 68 34 3e 32 2e 35 2e 31 20 53 75 70  >..<h4>2.5.1 Sup
cac0: 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64 75  pression of redu
cad0: 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69 6e  ndant columns in
cae0: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 73   WITHOUT ROWID s
caf0: 65 63 6f 6e 64 61 72 79 20 69 6e 64 65 78 65 64  econdary indexed
cb00: 0a 3c 2f 68 34 3e 0a 0a 3c 70 3e 20 5e 49 6e 20  .</h4>..<p> ^In 
cb10: 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20 57 49  an index on a WI
cb20: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
cb30: 65 2c 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  e, if one or mor
cb40: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  e of the columns
cb50: 0a 6f 66 20 74 61 62 6c 65 20 50 52 49 4d 41 52  .of table PRIMAR
cb60: 59 20 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63  Y KEY are also c
cb70: 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e  olumns of the in
cb80: 64 65 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e  dex, then the.in
cb90: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20  dexed column is 
cba0: 6e 6f 74 20 72 65 70 65 61 74 65 64 20 69 6e 20  not repeated in 
cbb0: 74 68 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75  the table-key su
cbc0: 66 66 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20  ffix on the end 
cbd0: 6f 66 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63  of.the index rec
cbe0: 6f 72 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78  ord.  ^(As an ex
cbf0: 61 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20  ample, consider 
cc00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51  the following SQ
cc10: 4c 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  L:..<blockquote>
cc20: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
cc30: 4c 45 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c  LE ex25(a,b,c,d,
cc40: 65 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c  e,PRIMARY KEY(d,
cc50: 63 2c 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f  c,a)) WITHOUT ro
cc60: 77 69 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45  wid;.CREATE INDE
cc70: 58 20 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35  X ex25ce ON ex25
cc80: 28 63 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e  (c,e);.CREATE IN
cc90: 44 45 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20  DEX ex25acde ON 
cca0: 65 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c  ex25(a,c,d,e);.<
ccb0: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
ccc0: 65 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20  e>..<p>Each row 
ccd0: 69 6e 20 74 68 65 20 65 78 32 35 63 65 20 69 6e  in the ex25ce in
cce0: 64 65 78 20 6f 66 20 74 68 65 20 65 78 61 6d 70  dex of the examp
ccf0: 6c 65 20 61 62 6f 76 65 20 63 6f 6e 73 69 73 74  le above consist
cd00: 73 20 6f 66 20 61 20 72 65 63 6f 72 64 0a 63 6f  s of a record.co
cd10: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 6f 6c  ntaining the fol
cd20: 6c 6f 77 69 6e 67 20 63 6f 6c 75 6d 6e 73 3a 20  lowing columns: 
cd30: 63 2c 20 65 2c 20 64 2c 20 61 2e 20 20 54 68 65  c, e, d, a.  The
cd40: 20 66 69 72 73 74 20 74 77 6f 20 63 6f 6c 75 6d   first two colum
cd50: 6e 73 20 61 72 65 0a 74 68 65 20 63 6f 6c 75 6d  ns are.the colum
cd60: 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  ns being indexed
cd70: 2c 20 63 20 61 6e 64 20 65 2e 20 20 54 68 65 20  , c and e.  The 
cd80: 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e  remaining column
cd90: 73 20 61 72 65 20 74 68 65 20 70 72 69 6d 61 72  s are the primar
cda0: 79 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f 72  y.key of the cor
cdb0: 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
cdc0: 20 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c   row.  Normally,
cdd0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
cde0: 20 77 6f 75 6c 64 20 62 65 0a 63 6f 6c 75 6d 6e   would be.column
cdf0: 73 20 64 2c 20 63 2c 20 61 6e 64 20 61 2c 20 62  s d, c, and a, b
ce00: 75 74 20 62 65 63 61 75 73 65 20 63 6f 6c 75 6d  ut because colum
ce10: 6e 20 63 20 61 6c 72 65 61 64 79 20 61 70 70 65  n c already appe
ce20: 61 72 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74  ars earlier in t
ce30: 68 65 0a 69 6e 64 65 78 2c 20 69 74 20 69 73 20  he.index, it is 
ce40: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
ce50: 20 6b 65 79 20 73 75 66 66 69 78 2e 29 5e 3c 2f   key suffix.)^</
ce60: 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74 68 65 20  p>..<p>^(In the 
ce70: 65 78 74 72 65 6d 65 20 63 61 73 65 20 77 68 65  extreme case whe
ce80: 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62  re the columns b
ce90: 65 69 6e 67 20 69 6e 64 65 78 65 64 20 63 6f 76  eing indexed cov
cea0: 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f  er all columns.o
ceb0: 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  f the PRIMARY KE
cec0: 59 2c 20 74 68 65 20 69 6e 64 65 78 20 77 69 6c  Y, the index wil
ced0: 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20 6f 6e 6c  l consist of onl
cee0: 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65  y the columns be
cef0: 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20 20 54 68  ing.indexed.  Th
cf00: 65 20 65 78 32 35 61 63 64 65 20 65 78 61 6d 70  e ex25acde examp
cf10: 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f 6e 73 74  le above demonst
cf20: 72 61 74 65 73 20 74 68 69 73 2e 29 5e 20 20 5e  rates this.)^  ^
cf30: 45 61 63 68 20 65 6e 74 72 79 20 69 6e 0a 74 68  Each entry in.th
cf40: 65 20 65 78 32 35 61 63 64 65 20 69 6e 64 65 78  e ex25acde index
cf50: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 6c   consists of onl
cf60: 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61 2c  y the columns a,
cf70: 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c 20 69 6e   c, d, and e, in
cf80: 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c 2f 70 3e   that.order.</p>
cf90: 0a 0a 3c 70 3e 20 5e 54 68 65 20 73 75 70 70 72  ..<p> ^The suppr
cfa0: 65 73 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64  ession of redund
cfb0: 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  ant columns in t
cfc0: 68 65 20 6b 65 79 20 73 75 66 66 69 78 20 6f 66  he key suffix of
cfd0: 20 61 6e 20 69 6e 64 65 78 0a 65 6e 74 72 79 20   an index.entry 
cfe0: 6f 6e 6c 79 20 6f 63 63 75 72 73 20 69 6e 20 57  only occurs in W
cff0: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
d000: 6c 65 73 2e 20 20 5e 49 6e 20 61 6e 20 6f 72 64  les.  ^In an ord
d010: 69 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c  inary rowid tabl
d020: 65 2c 0a 74 68 65 20 69 6e 64 65 78 20 65 6e 74  e,.the index ent
d030: 72 79 20 61 6c 77 61 79 73 20 65 6e 64 73 20 77  ry always ends w
d040: 69 74 68 20 74 68 65 20 72 6f 77 69 64 20 65 76  ith the rowid ev
d050: 65 6e 20 69 66 20 74 68 65 20 5b 49 4e 54 45 47  en if the [INTEG
d060: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 0a  ER PRIMARY KEY].
d070: 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65 20 6f 66  column is one of
d080: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69   the columns bei
d090: 6e 67 20 69 6e 64 65 78 65 64 2e 3c 2f 70 3e 0a  ng indexed.</p>.
d0a0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
d0b0: 74 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  t sqlite_master 
d0c0: 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20  {sqlite_master} 
d0d0: 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74  {sqlite_master t
d0e0: 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  able}</tcl>.<h3>
d0f0: 32 2e 36 20 53 74 6f 72 61 67 65 20 4f 66 20 54  2.6 Storage Of T
d100: 68 65 20 53 51 4c 20 44 61 74 61 62 61 73 65 20  he SQL Database 
d110: 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 0a 3c 70 3e  Schema</h3>..<p>
d120: 5e 50 61 67 65 20 31 20 6f 66 20 61 20 64 61 74  ^Page 1 of a dat
d130: 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 74 68  abase file is th
d140: 65 20 72 6f 6f 74 20 70 61 67 65 20 6f 66 20 61  e root page of a
d150: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 74 68   table b-tree th
d160: 61 74 0a 68 6f 6c 64 73 20 61 20 73 70 65 63 69  at.holds a speci
d170: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22  al table named "
d180: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 28  sqlite_master" (
d190: 6f 72 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  or "sqlite_temp_
d1a0: 6d 61 73 74 65 72 22 20 69 6e 0a 74 68 65 20 63  master" in.the c
d1b0: 61 73 65 20 6f 66 20 61 20 54 45 4d 50 20 64 61  ase of a TEMP da
d1c0: 74 61 62 61 73 65 29 20 77 68 69 63 68 20 73 74  tabase) which st
d1d0: 6f 72 65 73 20 74 68 65 20 63 6f 6d 70 6c 65 74  ores the complet
d1e0: 65 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e.database schem
d1f0: 61 2e 20 20 5e 28 54 68 65 20 73 74 72 75 63 74  a.  ^(The struct
d200: 75 72 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ure of the sqlit
d210: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
d220: 73 20 61 73 0a 69 66 20 69 74 20 68 61 64 20 62  s as.if it had b
d230: 65 65 6e 20 63 72 65 61 74 65 64 20 75 73 69 6e  een created usin
d240: 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  g the following 
d250: 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  SQL:</p>..<block
d260: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
d270: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
d280: 6d 61 73 74 65 72 28 0a 20 20 74 79 70 65 20 74  master(.  type t
d290: 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74  ext,.  name text
d2a0: 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78  ,.  tbl_name tex
d2b0: 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65 20 69 6e  t,.  rootpage in
d2c0: 74 65 67 65 72 2c 0a 20 20 73 71 6c 20 74 65 78  teger,.  sql tex
d2d0: 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  t.);.</pre></blo
d2e0: 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e  ckquote>)^..<p>^
d2f0: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
d300: 72 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  r table contains
d310: 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63   one row for eac
d320: 68 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  h table, index, 
d330: 76 69 65 77 2c 0a 61 6e 64 20 74 72 69 67 67 65  view,.and trigge
d340: 72 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20  r (collectively 
d350: 22 6f 62 6a 65 63 74 73 22 29 20 69 6e 20 74 68  "objects") in th
d360: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
d370: 61 2c 20 65 78 63 65 70 74 20 74 68 65 72 65 0a  a, except there.
d380: 69 73 20 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20  is no entry for 
d390: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
d3a0: 72 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 20  r table itself. 
d3b0: 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73   ^The sqlite_mas
d3c0: 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69  ter table.contai
d3d0: 6e 73 20 65 6e 74 72 69 65 73 20 66 6f 72 20 5b  ns entries for [
d3e0: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
d3f0: 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61 64 64 69  objects] in addi
d400: 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69 63 61 74  tion to applicat
d410: 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67 72 61 6d  ion-.and program
d420: 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65  mer-defined obje
d430: 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20  cts....<p>^(The 
d440: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 79  sqlite_master.ty
d450: 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62  pe column will b
d460: 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c  e one.of the fol
d470: 6c 6f 77 69 6e 67 20 74 65 78 74 20 73 74 72 69  lowing text stri
d480: 6e 67 73 3a 20 20 27 74 61 62 6c 65 27 2c 20 27  ngs:  'table', '
d490: 69 6e 64 65 78 27 2c 20 27 76 69 65 77 27 2c 20  index', 'view', 
d4a0: 6f 72 20 27 74 72 69 67 67 65 72 27 0a 61 63 63  or 'trigger'.acc
d4b0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 74 79  ording to the ty
d4c0: 70 65 20 6f 66 20 6f 62 6a 65 63 74 20 64 65 66  pe of object def
d4d0: 69 6e 65 64 2e 20 20 54 68 65 20 27 74 61 62 6c  ined.  The 'tabl
d4e0: 65 27 20 73 74 72 69 6e 67 20 69 73 20 75 73 65  e' string is use
d4f0: 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e  d.for both ordin
d500: 61 72 79 20 61 6e 64 20 5b 76 69 72 74 75 61 6c  ary and [virtual
d510: 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a   tables].)^</p>.
d520: 0a 3c 2f 70 3e 5e 28 54 68 65 20 73 71 6c 69 74  .</p>^(The sqlit
d530: 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 20 63 6f  e_master.name co
d540: 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64 20 74  lumn will hold t
d550: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f  he name of the o
d560: 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55 4e 49 51  bject.)^.^([UNIQ
d570: 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59  UE] and [PRIMARY
d580: 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74   KEY] constraint
d590: 73 20 6f 6e 20 74 61 62 6c 65 73 20 63 61 75 73  s on tables caus
d5a0: 65 20 53 51 4c 69 74 65 20 74 6f 20 63 72 65 61  e SQLite to crea
d5b0: 74 65 0a 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64  te.[internal ind
d5c0: 65 78 65 73 5d 20 77 69 74 68 20 6e 61 6d 65 73  exes] with names
d5d0: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71   of the form "sq
d5e0: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54  lite_autoindex_T
d5f0: 41 42 4c 45 5f 4e 22 0a 77 68 65 72 65 20 54 41  ABLE_N".where TA
d600: 42 4c 45 20 69 73 20 72 65 70 6c 61 63 65 64 20  BLE is replaced 
d610: 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  by the name of t
d620: 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
d630: 6e 74 61 69 6e 73 20 74 68 65 0a 63 6f 6e 73 74  ntains the.const
d640: 72 61 69 6e 74 20 61 6e 64 20 4e 20 69 73 20 61  raint and N is a
d650: 6e 20 69 6e 74 65 67 65 72 20 62 65 67 69 6e 6e  n integer beginn
d660: 69 6e 67 20 77 69 74 68 20 31 20 61 6e 64 20 69  ing with 1 and i
d670: 6e 63 72 65 61 73 69 6e 67 20 62 79 20 6f 6e 65  ncreasing by one
d680: 0a 77 69 74 68 20 65 61 63 68 20 63 6f 6e 73 74  .with each const
d690: 72 61 69 6e 74 20 73 65 65 6e 20 69 6e 20 74 68  raint seen in th
d6a0: 65 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  e table definiti
d6b0: 6f 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20 5b 57 49  on.)^.^(In a [WI
d6c0: 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62  THOUT ROWID] tab
d6d0: 6c 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  le, there is no 
d6e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e  sqlite_master en
d6f0: 74 72 79 20 66 6f 72 20 74 68 65 0a 50 52 49 4d  try for the.PRIM
d700: 41 52 59 20 4b 45 59 2c 20 62 75 74 20 74 68 65  ARY KEY, but the
d710: 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64   "sqlite_autoind
d720: 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65  ex_TABLE_N" name
d730: 20 69 73 20 73 65 74 20 61 73 69 64 65 0a 66 6f   is set aside.fo
d740: 72 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  r the PRIMARY KE
d750: 59 20 61 73 20 69 66 20 74 68 65 20 73 71 6c 69  Y as if the sqli
d760: 74 65 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20  te_master entry 
d770: 64 69 64 20 65 78 69 73 74 2e 20 20 54 68 69 73  did exist.  This
d780: 0a 77 69 6c 6c 20 61 66 66 65 63 74 20 74 68 65  .will affect the
d790: 20 6e 75 6d 62 65 72 69 6e 67 20 6f 66 20 73 75   numbering of su
d7a0: 62 73 65 71 75 65 6e 74 20 55 4e 49 51 55 45 20  bsequent UNIQUE 
d7b0: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 0a 5e  constraints.)^.^
d7c0: 54 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f  The "sqlite_auto
d7d0: 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e  index_TABLE_N" n
d7e0: 61 6d 65 20 69 73 20 6e 65 76 65 72 20 61 6c 6c  ame is never all
d7f0: 6f 63 61 74 65 64 20 66 6f 72 20 61 6e 0a 5b 49  ocated for an.[I
d800: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
d810: 45 59 5d 2c 20 65 69 74 68 65 72 20 69 6e 20 72  EY], either in r
d820: 6f 77 69 64 20 74 61 62 6c 65 73 20 6f 72 20 57  owid tables or W
d830: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
d840: 6c 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  les..</p>..<p>Th
d850: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
d860: 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20  tbl_name column 
d870: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f  holds the name o
d880: 66 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65  f a table or vie
d890: 77 0a 74 68 61 74 20 74 68 65 20 6f 62 6a 65 63  w.that the objec
d8a0: 74 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20  t is associated 
d8b0: 77 69 74 68 2e 20 20 5e 46 6f 72 20 61 20 74 61  with.  ^For a ta
d8c0: 62 6c 65 20 6f 72 20 76 69 65 77 2c 20 74 68 65  ble or view, the
d8d0: 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e  .tbl_name column
d8e0: 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68   is a copy of th
d8f0: 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20  e name column.  
d900: 5e 46 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20 74  ^For an index, t
d910: 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69 73 20 74  he tbl_name.is t
d920: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
d930: 61 62 6c 65 20 74 68 61 74 20 69 73 20 69 6e 64  able that is ind
d940: 65 78 65 64 2e 20 20 5e 46 6f 72 20 61 20 74 72  exed.  ^For a tr
d950: 69 67 67 65 72 2c 20 74 68 65 20 74 62 6c 5f 6e  igger, the tbl_n
d960: 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72 65  ame.column store
d970: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
d980: 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
d990: 74 68 61 74 20 63 61 75 73 65 73 20 74 68 65 20  that causes the 
d9a0: 74 72 69 67 67 65 72 20 0a 74 6f 20 66 69 72 65  trigger .to fire
d9b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  .</p>..<p>^(The 
d9c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f  sqlite_master.ro
d9d0: 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74  otpage column st
d9e0: 6f 72 65 73 20 74 68 65 20 70 61 67 65 20 6e 75  ores the page nu
d9f0: 6d 62 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74  mber of the root
da00: 0a 62 2d 74 72 65 65 20 70 61 67 65 20 66 6f 72  .b-tree page for
da10: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65   tables and inde
da20: 78 65 73 2e 29 5e 20 20 5e 46 6f 72 20 72 6f 77  xes.)^  ^For row
da30: 73 20 74 68 61 74 20 64 65 66 69 6e 65 20 76 69  s that define vi
da40: 65 77 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61  ews, triggers,.a
da50: 6e 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  nd virtual table
da60: 73 2c 20 74 68 65 20 72 6f 6f 74 70 61 67 65 20  s, the rootpage 
da70: 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f 72 20 4e  column is 0 or N
da80: 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  ULL.</p>..<p>^(T
da90: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
daa0: 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72  .sql column stor
dab0: 65 73 20 53 51 4c 20 74 65 78 74 20 74 68 61 74  es SQL text that
dac0: 20 64 65 73 63 72 69 62 65 73 20 74 68 65 0a 6f   describes the.o
dad0: 62 6a 65 63 74 2e 20 20 54 68 69 73 20 53 51 4c  bject.  This SQL
dae0: 20 74 65 78 74 20 69 73 20 61 20 5b 43 52 45 41   text is a [CREA
daf0: 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41  TE TABLE], [CREA
db00: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
db10: 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58  ],.[CREATE INDEX
db20: 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d  ],.[CREATE VIEW]
db30: 2c 20 6f 72 20 5b 43 52 45 41 54 45 20 54 52 49  , or [CREATE TRI
db40: 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 20  GGER] statement 
db50: 74 68 61 74 20 69 66 20 65 76 61 6c 75 61 74 65  that if evaluate
db60: 64 20 61 67 61 69 6e 73 74 0a 74 68 65 20 64 61  d against.the da
db70: 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e  tabase file when
db80: 20 69 74 20 69 73 20 74 68 65 20 6d 61 69 6e 20   it is the main 
db90: 64 61 74 61 62 61 73 65 20 6f 66 20 61 20 5b 64  database of a [d
dba0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
dbb0: 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63 72 65 61  on].would recrea
dbc0: 74 65 64 20 74 68 65 20 6f 62 6a 65 63 74 2e 29  ted the object.)
dbd0: 5e 20 20 54 68 65 20 74 65 78 74 20 69 73 20 75  ^  The text is u
dbe0: 73 75 61 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66  sually a copy of
dbf0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74   the original.st
dc00: 61 74 65 6d 65 6e 74 20 75 73 65 64 20 74 6f 20  atement used to 
dc10: 63 72 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63  create the objec
dc20: 74 20 62 75 74 20 77 69 74 68 20 6e 6f 72 6d 61  t but with norma
dc30: 6c 69 7a 61 74 69 6f 6e 73 20 61 70 70 6c 69 65  lizations applie
dc40: 64 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74 65  d so.that the te
dc50: 78 74 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74  xt conforms to t
dc60: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c  he following rul
dc70: 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54  es:..<ul>.<li>^T
dc80: 68 65 20 43 52 45 41 54 45 2c 20 54 41 42 4c 45  he CREATE, TABLE
dc90: 2c 20 56 49 45 57 2c 20 54 52 49 47 47 45 52 2c  , VIEW, TRIGGER,
dca0: 20 61 6e 64 20 49 4e 44 45 58 20 6b 65 79 77 6f   and INDEX keywo
dcb0: 72 64 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  rds at the begin
dcc0: 6e 69 6e 67 0a 6f 66 20 74 68 65 20 73 74 61 74  ning.of the stat
dcd0: 65 6d 65 6e 74 20 61 72 65 20 63 6f 6e 76 65 72  ement are conver
dce0: 74 65 64 20 74 6f 20 61 6c 6c 20 75 70 70 65 72  ted to all upper
dcf0: 20 63 61 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c   case letters..<
dd00: 6c 69 3e 5e 54 68 65 20 54 45 4d 50 20 6f 72 20  li>^The TEMP or 
dd10: 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72  TEMPORARY keywor
dd20: 64 20 69 73 20 72 65 6d 6f 76 65 64 20 69 66 20  d is removed if 
dd30: 69 74 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  it occurs after 
dd40: 74 68 65 20 0a 69 6e 69 74 69 61 6c 20 43 52 45  the .initial CRE
dd50: 41 54 45 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69  ATE keyword..<li
dd60: 3e 5e 41 6e 79 20 64 61 74 61 62 61 73 65 20 6e  >^Any database n
dd70: 61 6d 65 20 71 75 61 6c 69 66 69 65 72 20 74 68  ame qualifier th
dd80: 61 74 20 6f 63 63 75 72 73 20 70 72 69 6f 72 20  at occurs prior 
dd90: 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
dda0: 68 65 0a 6f 62 6a 65 63 74 20 62 65 69 6e 67 20  he.object being 
ddb0: 63 72 65 61 74 65 64 20 69 73 20 72 65 6d 6f 76  created is remov
ddc0: 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67  ed..<li>^Leading
ddd0: 20 73 70 61 63 65 73 20 61 72 65 20 72 65 6d 6f   spaces are remo
dde0: 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70  ved..<li>^All sp
ddf0: 61 63 65 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  aces following t
de00: 68 65 20 66 69 72 73 74 20 74 77 6f 20 6b 65 79  he first two key
de10: 77 6f 72 64 73 20 61 72 65 20 63 6f 6e 76 65 72  words are conver
de20: 74 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c  ted into a singl
de30: 65 0a 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a  e.space..</ul>..
de40: 3c 70 3e 5e 28 54 68 65 20 74 65 78 74 20 69 6e  <p>^(The text in
de50: 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
de60: 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 69 73  er.sql column is
de70: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f   a copy of the o
de80: 72 69 67 69 6e 61 6c 0a 43 52 45 41 54 45 20 73  riginal.CREATE s
de90: 74 61 74 65 6d 65 6e 74 20 74 65 78 74 20 74 68  tatement text th
dea0: 61 74 20 63 72 65 61 74 65 64 20 74 68 65 20 6f  at created the o
deb0: 62 6a 65 63 74 2c 20 65 78 63 65 70 74 20 6e 6f  bject, except no
dec0: 72 6d 61 6c 69 7a 65 64 20 61 73 0a 64 65 73 63  rmalized as.desc
ded0: 72 69 62 65 64 20 61 62 6f 76 65 20 61 6e 64 20  ribed above and 
dee0: 61 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 73  as modified by s
def0: 75 62 73 65 71 75 65 6e 74 20 5b 41 4c 54 45 52  ubsequent [ALTER
df00: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
df10: 74 73 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69  ts.)^.^(The sqli
df20: 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 69 73  te_master.sql is
df30: 20 4e 55 4c 4c 20 66 6f 72 20 74 68 65 20 5b 69   NULL for the [i
df40: 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65 73 5d  nternal indexes]
df50: 20 74 68 61 74 20 61 72 65 0a 61 75 74 6f 6d 61   that are.automa
df60: 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
df70: 62 79 20 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b  by [UNIQUE] or [
df80: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e  PRIMARY KEY] con
df90: 73 74 72 61 69 6e 74 73 2e 29 5e 3c 2f 70 3e 0a  straints.)^</p>.
dfa0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
dfb0: 6e 74 20 69 6e 74 73 63 68 65 6d 61 20 7b 69 6e  nt intschema {in
dfc0: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
dfd0: 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e  jects} \.{intern
dfe0: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
dff0: 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  } {internal inde
e000: 78 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64  x} {internal ind
e010: 65 78 65 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61  exes} \.{interna
e020: 6c 20 74 61 62 6c 65 7d 20 7b 69 6e 74 65 72 6e  l table} {intern
e030: 61 6c 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e  al tables}</tcl>
e040: 0a 3c 68 34 3e 32 2e 36 2e 31 20 49 6e 74 65 72  .<h4>2.6.1 Inter
e050: 6e 61 6c 20 53 63 68 65 6d 61 20 4f 62 6a 65 63  nal Schema Objec
e060: 74 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 49 6e 20  ts</h4>..<p>^In 
e070: 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68 65 20  addition to the 
e080: 74 61 62 6c 65 73 2c 20 69 6e 64 65 78 65 73 2c  tables, indexes,
e090: 20 76 69 65 77 73 2c 20 61 6e 64 20 74 72 69 67   views, and trig
e0a0: 67 65 72 73 20 63 72 65 61 74 65 64 20 62 79 0a  gers created by.
e0b0: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  the application 
e0c0: 61 6e 64 2f 6f 72 20 74 68 65 20 64 65 76 65 6c  and/or the devel
e0d0: 6f 70 65 72 20 75 73 69 6e 67 20 43 52 45 41 54  oper using CREAT
e0e0: 45 20 73 74 61 74 65 6d 65 6e 74 73 20 53 51 4c  E statements SQL
e0f0: 2c 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73  , the.sqlite_mas
e100: 74 65 72 20 74 61 62 6c 65 20 6d 61 79 20 63 6f  ter table may co
e110: 6e 74 61 69 6e 20 7a 65 72 6f 20 6f 72 20 6d 6f  ntain zero or mo
e120: 72 65 20 65 6e 74 72 69 65 73 20 66 6f 72 20 0a  re entries for .
e130: 3c 69 3e 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  <i>internal sche
e140: 6d 61 20 6f 62 6a 65 63 74 73 3c 2f 69 3e 20 74  ma objects</i> t
e150: 68 61 74 20 61 72 65 20 63 72 65 61 74 65 64 20  hat are created 
e160: 62 79 20 53 51 4c 69 74 65 20 66 6f 72 20 69 74  by SQLite for it
e170: 73 20 0a 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20  s .own internal 
e180: 75 73 65 2e 20 20 5e 54 68 65 20 6e 61 6d 65 73  use.  ^The names
e190: 20 6f 66 20 69 6e 74 65 72 6e 61 6c 20 73 63 68   of internal sch
e1a0: 65 6d 61 20 6f 62 6a 65 63 74 73 0a 61 6c 77 61  ema objects.alwa
e1b0: 79 73 20 62 65 67 69 6e 20 77 69 74 68 20 22 73  ys begin with "s
e1c0: 71 6c 69 74 65 5f 22 20 61 6e 64 20 61 6e 79 20  qlite_" and any 
e1d0: 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69  table, index, vi
e1e0: 65 77 2c 20 6f 72 20 74 72 69 67 67 65 72 0a 77  ew, or trigger.w
e1f0: 68 6f 73 65 20 6e 61 6d 65 20 62 65 67 69 6e 73  hose name begins
e200: 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20   with "sqlite_" 
e210: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 73  is an internal s
e220: 63 68 65 6d 61 20 6f 62 6a 65 63 74 2e 0a 5e 53  chema object..^S
e230: 51 4c 69 74 65 20 70 72 6f 68 69 62 69 74 73 20  QLite prohibits 
e240: 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 72 6f  applications fro
e250: 6d 20 63 72 65 61 74 69 6e 67 20 6f 62 6a 65 63  m creating objec
e260: 74 73 20 77 68 6f 73 65 20 6e 61 6d 65 73 20 62  ts whose names b
e270: 65 67 69 6e 0a 77 69 74 68 20 22 73 71 6c 69 74  egin.with "sqlit
e280: 65 5f 22 2e 20 20 0a 0a 3c 70 3e 49 6e 74 65 72  e_".  ..<p>Inter
e290: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
e2a0: 74 73 20 75 73 65 64 20 62 79 20 53 51 4c 69 74  ts used by SQLit
e2b0: 65 20 6d 61 79 20 69 6e 63 6c 75 64 65 20 74 68  e may include th
e2c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 75  e following:..<u
e2d0: 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e 64 69 63 65  l>.<li><p>Indice
e2e0: 73 20 77 69 74 68 20 6e 61 6d 65 73 20 6f 66 20  s with names of 
e2f0: 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69 74 65  the form "sqlite
e300: 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45  _autoindex_TABLE
e310: 5f 4e 22 20 74 68 61 74 0a 20 20 20 20 20 20 20  _N" that.       
e320: 61 72 65 20 75 73 65 64 20 74 6f 20 69 6d 70 6c  are used to impl
e330: 65 6d 65 6e 74 20 5b 55 4e 49 51 55 45 5d 20 61  ement [UNIQUE] a
e340: 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d  nd [PRIMARY KEY]
e350: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e 0a   constraints on.
e360: 20 20 20 20 20 20 20 6f 72 64 69 6e 61 72 79 20         ordinary 
e370: 74 61 62 6c 65 73 2e 0a 0a 3c 6c 69 3e 3c 70 3e  tables...<li><p>
e380: 41 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65  A table with the
e390: 20 6e 61 6d 65 20 22 73 71 6c 69 74 65 5f 73 65   name "sqlite_se
e3a0: 71 75 65 6e 63 65 22 20 74 68 61 74 20 69 73 20  quence" that is 
e3b0: 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72 61  used to keep tra
e3c0: 63 6b 0a 20 20 20 20 20 20 20 6f 66 20 74 68 65  ck.       of the
e3d0: 20 6d 61 78 69 6d 75 6d 20 68 69 73 74 6f 72 69   maximum histori
e3e0: 63 61 6c 20 5b 49 4e 54 45 47 45 52 20 50 52 49  cal [INTEGER PRI
e3f0: 4d 41 52 59 20 4b 45 59 5d 20 66 6f 72 20 61 20  MARY KEY] for a 
e400: 74 61 62 6c 65 20 74 68 61 74 0a 20 20 20 20 20  table that.     
e410: 20 20 75 73 69 6e 67 20 5b 41 55 54 4f 49 4e 43    using [AUTOINC
e420: 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70  REMENT]...<li><p
e430: 3e 54 61 62 6c 65 73 20 77 69 74 68 20 6e 61 6d  >Tables with nam
e440: 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  es of the form "
e450: 73 71 6c 69 74 65 5f 73 74 61 74 4e 22 20 77 68  sqlite_statN" wh
e460: 65 72 65 20 4e 20 69 73 20 61 6e 20 69 6e 74 65  ere N is an inte
e470: 67 65 72 2e 0a 20 20 20 20 20 20 20 53 75 63 68  ger..       Such
e480: 20 74 61 62 6c 65 73 20 73 74 6f 72 65 20 64 61   tables store da
e490: 74 61 62 61 73 65 20 73 74 61 74 69 73 74 69 63  tabase statistic
e4a0: 73 20 67 61 74 68 65 72 65 64 20 62 79 20 74 68  s gathered by th
e4b0: 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a 20 20 20 20  e [ANALYZE].    
e4c0: 20 20 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 75     command and u
e4d0: 73 65 64 20 62 79 20 74 68 65 20 71 75 65 72 79  sed by the query
e4e0: 20 70 6c 61 6e 6e 65 72 20 74 6f 20 68 65 6c 70   planner to help
e4f0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62   determine the b
e500: 65 73 74 0a 20 20 20 20 20 20 20 61 6c 67 6f 72  est.       algor
e510: 69 74 68 6d 20 74 6f 20 75 73 65 20 66 6f 72 20  ithm to use for 
e520: 65 61 63 68 20 71 75 65 72 79 2e 0a 3c 2f 75 6c  each query..</ul
e530: 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e 74 65 72 6e  >..<p>New intern
e540: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
e550: 73 20 6e 61 6d 65 73 2c 20 61 6c 77 61 79 73 20  s names, always 
e560: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 22  beginning with "
e570: 73 71 6c 69 74 65 5f 22 2c 0a 6d 61 79 20 62 65  sqlite_",.may be
e580: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 53 51   added to the SQ
e590: 4c 69 74 65 20 66 69 6c 65 20 66 6f 72 6d 61 74  Lite file format
e5a0: 20 69 6e 20 66 75 74 75 72 65 20 72 65 6c 65 61   in future relea
e5b0: 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ses...<tcl>hd_fr
e5c0: 61 67 6d 65 6e 74 20 73 65 71 74 61 62 20 7b 73  agment seqtab {s
e5d0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 7d 3c  qlite_sequence}<
e5e0: 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 32 20  /tcl>.<h4>2.6.2 
e5f0: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
e600: 6e 63 65 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a  nce table</h4>..
e610: 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 73  <p>^The sqlite_s
e620: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69 73  equence table is
e630: 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 74 61 62   an internal tab
e640: 6c 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  le used to help 
e650: 69 6d 70 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49  implement.[AUTOI
e660: 4e 43 52 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65  NCREMENT].  ^The
e670: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
e680: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
e690: 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  d automatically.
e6a0: 77 68 65 6e 65 76 65 72 20 61 6e 79 20 6f 72 64  whenever any ord
e6b0: 69 6e 61 72 79 20 74 61 62 6c 65 20 77 69 74 68  inary table with
e6c0: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
e6d0: 54 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  T integer primar
e6e0: 79 0a 6b 65 79 20 69 73 20 63 72 65 61 74 65 64  y.key is created
e6f0: 2e 20 20 5e 4f 6e 63 65 20 63 72 65 61 74 65 64  .  ^Once created
e700: 2c 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  , the sqlite_seq
e710: 75 65 6e 63 65 20 74 61 62 6c 65 20 65 78 69 73  uence table exis
e720: 74 73 20 69 6e 20 74 68 65 0a 73 71 6c 69 74 65  ts in the.sqlite
e730: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 66 6f  _master table fo
e740: 72 65 76 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74  rever; it cannot
e750: 20 62 65 20 64 72 6f 70 70 65 64 2e 0a 5e 28 54   be dropped..^(T
e760: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 74 68  he schema for th
e770: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
e780: 65 20 74 61 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c  e table is:..<bl
e790: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
e7a0: 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
e7b0: 74 65 5f 73 65 71 75 65 6e 63 65 28 6e 61 6d 65  te_sequence(name
e7c0: 2c 73 65 71 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ,seq);.</pre></b
e7d0: 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
e7e0: 3e 5e 54 68 65 72 65 20 69 73 20 61 20 73 69 6e  >^There is a sin
e7f0: 67 6c 65 20 72 6f 77 20 69 6e 20 74 68 65 20 73  gle row in the s
e800: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
e810: 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20 6f 72  able for each or
e820: 64 69 6e 61 72 79 0a 74 61 62 6c 65 20 74 68 61  dinary.table tha
e830: 74 20 75 73 65 73 20 41 55 54 4f 49 4e 43 52 45  t uses AUTOINCRE
e840: 4d 45 4e 54 2e 20 20 5e 28 54 68 65 20 6e 61 6d  MENT.  ^(The nam
e850: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 28  e of the table (
e860: 61 73 20 69 74 20 61 70 70 65 61 72 73 20 69 6e  as it appears in
e870: 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e  .sqlite_master.n
e880: 61 6d 65 29 20 69 73 20 69 6e 20 74 68 65 20 73  ame) is in the s
e890: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 6d  qlite_sequence.m
e8a0: 61 69 6e 20 66 69 65 6c 64 20 61 6e 64 20 74 68  ain field and th
e8b0: 65 20 6c 61 72 67 65 73 74 0a 5b 49 4e 54 45 47  e largest.[INTEG
e8c0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
e8d0: 65 76 65 72 20 75 73 65 64 20 62 79 20 74 68 61  ever used by tha
e8e0: 74 20 74 61 62 6c 65 20 69 73 20 69 6e 20 74 68  t table is in th
e8f0: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
e900: 65 2e 73 65 71 0a 66 69 65 6c 64 2e 29 5e 20 20  e.seq.field.)^  
e910: 5e 4e 65 77 20 61 75 74 6f 6d 61 74 69 63 61 6c  ^New automatical
e920: 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e 74  ly generated int
e930: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
e940: 73 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d  s for AUTOINCREM
e950: 45 4e 54 0a 74 61 62 6c 65 73 20 61 72 65 20 67  ENT.tables are g
e960: 75 61 72 61 6e 74 65 65 64 20 74 6f 20 62 65 20  uaranteed to be 
e970: 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20  larger than the 
e980: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
e990: 73 65 71 20 66 69 65 6c 64 20 66 6f 72 0a 74 68  seq field for.th
e9a0: 61 74 20 74 61 62 6c 65 2e 0a 5e 28 49 66 20 74  at table..^(If t
e9b0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e9c0: 63 65 2e 73 65 71 20 66 69 65 6c 64 20 6f 66 20  ce.seq field of 
e9d0: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
e9e0: 20 74 61 62 6c 65 20 69 73 20 61 6c 72 65 61 64   table is alread
e9f0: 79 20 61 74 0a 74 68 65 20 6c 61 72 67 65 73 74  y at.the largest
ea00: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 28   integer value (
ea10: 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
ea20: 38 30 37 29 20 74 68 65 6e 20 61 74 74 65 6d 70  807) then attemp
ea30: 74 73 20 74 6f 20 61 64 64 20 6e 65 77 0a 72 6f  ts to add new.ro
ea40: 77 73 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ws to that table
ea50: 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
ea60: 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64  ically generated
ea70: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
ea80: 20 77 69 6c 6c 20 66 61 69 6c 0a 77 69 74 68 20   will fail.with 
ea90: 61 6e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d  an [SQLITE_FULL]
eaa0: 20 65 72 72 6f 72 2e 29 5e 0a 5e 54 68 65 20 73   error.)^.^The s
eab0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
eac0: 65 71 20 66 69 65 6c 64 20 69 73 20 61 75 74 6f  eq field is auto
ead0: 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65  matically update
eae0: 64 20 69 66 20 72 65 71 75 69 72 65 64 20 77 68  d if required wh
eaf0: 65 6e 0a 6e 65 77 20 65 6e 74 72 69 65 73 20 61  en.new entries a
eb00: 72 65 20 61 64 64 65 64 20 74 6f 20 61 6e 20 41  re added to an A
eb10: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
eb20: 6c 65 2e 20 20 0a 5e 54 68 65 20 73 71 6c 69 74  le.  .^The sqlit
eb30: 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66  e_sequence row f
eb40: 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  or an AUTOINCREM
eb50: 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61 75 74  ENT table is aut
eb60: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74  omatically delet
eb70: 65 64 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c  ed.when the tabl
eb80: 65 20 69 73 20 64 72 6f 70 70 65 64 2e 0a 5e 49  e is dropped..^I
eb90: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  f the sqlite_seq
eba0: 75 65 6e 63 65 20 72 6f 77 20 66 6f 72 20 61 6e  uence row for an
ebb0: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
ebc0: 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78  able does not ex
ebd0: 69 73 74 20 77 68 65 6e 0a 74 68 65 20 41 55 54  ist when.the AUT
ebe0: 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
ebf0: 20 69 73 20 75 70 64 61 74 65 64 2c 20 74 68 65   is updated, the
ec00: 6e 20 61 20 6e 65 77 20 73 71 6c 69 74 65 5f 73  n a new sqlite_s
ec10: 65 71 75 65 6e 63 65 20 72 6f 77 20 69 73 20 63  equence row is c
ec20: 72 65 61 74 65 64 2e 0a 5e 28 49 66 20 74 68 65  reated..^(If the
ec30: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ec40: 2e 73 65 71 20 76 61 6c 75 65 20 66 6f 72 20 61  .seq value for a
ec50: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
ec60: 74 61 62 6c 65 20 69 73 20 6d 61 6e 75 61 6c 6c  table is manuall
ec70: 79 20 0a 73 65 74 20 74 6f 20 73 6f 6d 65 74 68  y .set to someth
ec80: 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61  ing other than a
ec90: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68  n integer and th
eca0: 65 72 65 20 69 73 20 61 20 73 75 62 73 65 71 75  ere is a subsequ
ecb0: 65 6e 74 20 61 74 74 65 6d 70 74 20 74 6f 0a 69  ent attempt to.i
ecc0: 6e 73 65 72 74 20 74 68 65 20 6f 72 20 75 70 64  nsert the or upd
ecd0: 61 74 65 20 74 68 65 20 41 55 54 4f 49 4e 43 52  ate the AUTOINCR
ece0: 45 4d 45 4e 54 20 74 61 62 6c 65 2c 20 74 68 65  EMENT table, the
ecf0: 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
ed00: 73 20 75 6e 64 65 66 69 6e 65 64 2e 29 5e 0a 0a  s undefined.)^..
ed10: 3c 70 3e 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20  <p>^Application 
ed20: 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20  code is allowed 
ed30: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 73 71  to modify the sq
ed40: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
ed50: 62 6c 65 2c 20 74 6f 20 61 64 64 0a 6e 65 77 20  ble, to add.new 
ed60: 72 6f 77 73 2c 20 74 6f 20 64 65 6c 65 74 65 20  rows, to delete 
ed70: 72 6f 77 73 2c 20 6f 72 20 74 6f 20 6d 6f 64 69  rows, or to modi
ed80: 66 79 20 65 78 69 73 74 69 6e 67 20 72 6f 77 73  fy existing rows
ed90: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 61 70 70  .  ^However, app
eda0: 6c 69 63 61 74 69 6f 6e 0a 63 6f 64 65 20 63 61  lication.code ca
edb0: 6e 6e 6f 74 20 63 72 65 61 74 65 20 74 68 65 20  nnot create the 
edc0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
edd0: 74 61 62 6c 65 20 69 66 20 69 74 20 64 6f 65 73  table if it does
ede0: 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 65 78 69   not already exi
edf0: 73 74 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e  st..^Application
ee00: 20 63 6f 64 65 20 63 61 6e 20 64 65 6c 65 74 65   code can delete
ee10: 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f   all entries fro
ee20: 6d 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  m the sqlite_seq
ee30: 75 65 6e 63 65 20 74 61 62 6c 65 2c 0a 62 75 74  uence table,.but
ee40: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64   application cod
ee50: 65 20 63 61 6e 6e 6f 74 20 64 72 6f 70 20 74 68  e cannot drop th
ee60: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
ee70: 65 20 74 61 62 6c 65 2e 0a 0a 3c 74 63 6c 3e 68  e table...<tcl>h
ee80: 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 31  d_fragment stat1
ee90: 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74  tab {sqlite_stat
eea0: 31 7d 20 53 51 4c 49 54 45 5f 53 54 41 54 31 20  1} SQLITE_STAT1 
eeb0: 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 33  </tcl>.<h4>2.6.3
eec0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   The sqlite_stat
eed0: 31 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70  1 table</h4>..<p
eee0: 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  >^The sqlite_sta
eef0: 74 31 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61  t1 is an interna
ef00: 6c 20 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  l table created 
ef10: 62 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  by the [ANALYZE]
ef20: 20 63 6f 6d 6d 61 6e 64 0a 61 6e 64 20 75 73 65   command.and use
ef30: 64 20 74 6f 20 68 6f 6c 64 20 73 75 70 70 6c 65  d to hold supple
ef40: 6d 65 6e 74 61 6c 20 69 6e 66 6f 72 6d 61 74 69  mental informati
ef50: 6f 6e 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20  on about tables 
ef60: 61 6e 64 20 69 6e 64 65 78 65 73 20 74 68 61 74  and indexes that
ef70: 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e   the.query plann
ef80: 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20 68 65  er can use to he
ef90: 6c 70 20 69 74 20 66 69 6e 64 20 62 65 74 74 65  lp it find bette
efa0: 72 20 77 61 79 73 20 6f 66 20 70 65 72 66 6f 72  r ways of perfor
efb0: 6d 69 6e 67 20 71 75 65 72 69 65 73 2e 0a 5e 41  ming queries..^A
efc0: 70 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20  pplications can 
efd0: 75 70 64 61 74 65 2c 20 64 65 6c 65 74 65 20 66  update, delete f
efe0: 72 6f 6d 2c 20 69 6e 73 65 72 74 20 69 6e 74 6f  rom, insert into
eff0: 20 6f 72 20 64 72 6f 70 20 74 68 65 20 73 71 6c   or drop the sql
f000: 69 74 65 5f 73 74 61 74 31 0a 74 61 62 6c 65 2c  ite_stat1.table,
f010: 20 62 75 74 20 6d 61 79 20 6e 6f 74 20 63 72 65   but may not cre
f020: 61 74 65 20 6f 72 20 61 6c 74 65 72 20 74 68 65  ate or alter the
f030: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
f040: 62 6c 65 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d  ble..^(The schem
f050: 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  a of the sqlite_
f060: 73 74 61 74 31 20 74 61 62 6c 65 20 69 73 20 61  stat1 table is a
f070: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f  s follows:..<blo
f080: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
f090: 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
f0a0: 65 5f 73 74 61 74 31 28 74 62 6c 2c 69 64 78 2c  e_stat1(tbl,idx,
f0b0: 73 74 61 74 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  stat);.</pre></b
f0c0: 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
f0d0: 3e 20 5e 28 54 68 65 72 65 20 69 73 20 6e 6f 72  > ^(There is nor
f0e0: 6d 61 6c 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65  mally one row pe
f0f0: 72 20 69 6e 64 65 78 2c 20 77 69 74 68 20 74 68  r index, with th
f100: 65 20 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69  e index identifi
f110: 65 64 20 62 79 20 74 68 65 0a 6e 61 6d 65 20 69  ed by the.name i
f120: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
f130: 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 2e 29 5e  t1.idx column.)^
f140: 20 20 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73    ^(The sqlite_s
f150: 74 61 74 31 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20  tat1.tbl column 
f160: 69 73 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is.the name of t
f170: 68 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63  he table to whic
f180: 68 20 74 68 65 20 69 6e 64 65 78 20 62 65 6c 6f  h the index belo
f190: 6e 67 73 2e 29 5e 20 20 5e 28 49 6e 20 65 61 63  ngs.)^  ^(In eac
f1a0: 68 20 73 75 63 68 20 72 6f 77 2c 20 0a 74 68 65  h such row, .the
f1b0: 20 73 71 6c 69 74 65 5f 73 74 61 74 2e 73 74 61   sqlite_stat.sta
f1c0: 74 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65  t column will be
f1d0: 0a 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69 73  .a string consis
f1e0: 74 69 6e 67 20 6f 66 20 61 20 6c 69 73 74 20 6f  ting of a list o
f1f0: 66 20 69 6e 74 65 67 65 72 73 20 66 6f 6c 6c 6f  f integers follo
f200: 77 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d  wed by zero or m
f210: 6f 72 65 20 0a 61 72 67 75 6d 65 6e 74 73 2e 29  ore .arguments.)
f220: 5e 20 20 5e 54 68 65 20 66 69 72 73 74 20 69 6e  ^  ^The first in
f230: 74 65 67 65 72 20 69 6e 20 74 68 69 73 0a 6c 69  teger in this.li
f240: 73 74 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  st is the approx
f250: 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
f260: 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
f270: 78 20 61 6e 64 20 69 6e 20 74 68 65 20 74 61 62  x and in the tab
f280: 6c 65 2e 0a 5e 54 68 65 20 73 65 63 6f 6e 64 20  le..^The second 
f290: 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61  integer is the a
f2a0: 70 70 72 6f 78 69 6d 61 74 65 20 61 76 65 72 61  pproximate avera
f2b0: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  ge number of row
f2c0: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a 74  s in the index.t
f2d0: 68 61 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  hat have the sam
f2e0: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66  e value in the f
f2f0: 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
f300: 68 65 20 69 6e 64 65 78 2e 20 20 5e 54 68 65 20  he index.  ^The 
f310: 74 68 69 72 64 20 0a 69 6e 74 65 67 65 72 20 69  third .integer i
f320: 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
f330: 65 20 61 76 65 72 61 67 65 20 6e 75 6d 62 65 72  e average number
f340: 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
f350: 69 6e 64 65 78 20 74 68 61 74 20 68 61 76 65 20  index that have 
f360: 0a 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20  .the same value 
f370: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 77  for the first tw
f380: 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65  o columns.  ^The
f390: 20 4e 2d 74 68 20 69 6e 74 65 67 65 72 20 28 66   N-th integer (f
f3a0: 6f 72 20 4e 3e 31 29 20 0a 69 73 20 74 68 65 20  or N>1) .is the 
f3b0: 61 70 70 72 6f 78 69 6d 61 74 65 20 61 76 65 72  approximate aver
f3c0: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  age number of ro
f3d0: 77 73 20 69 6e 20 0a 74 68 65 20 69 6e 64 65 78  ws in .the index
f3e0: 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20   which have the 
f3f0: 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
f400: 68 65 20 66 69 72 73 74 20 4e 2d 31 20 63 6f 6c  he first N-1 col
f410: 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a 61 20 4b 2d  umns.  ^For.a K-
f420: 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2c 20 74 68  column index, th
f430: 65 72 65 20 77 69 6c 6c 20 62 65 20 4b 2b 31 20  ere will be K+1 
f440: 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65 20  integers in the 
f450: 73 74 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 49  stat column.  ^I
f460: 66 0a 74 68 65 20 69 6e 64 65 78 20 69 73 20 75  f.the index is u
f470: 6e 69 71 75 65 2c 20 74 68 65 6e 20 74 68 65 20  nique, then the 
f480: 6c 61 73 74 20 69 6e 74 65 67 65 72 20 77 69 6c  last integer wil
f490: 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e 5e 54 68 65  l be 1...<p>^The
f4a0: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65 72   list of integer
f4b0: 73 20 69 6e 20 74 68 65 20 73 74 61 74 20 63 6f  s in the stat co
f4c0: 6c 75 6d 6e 20 63 61 6e 20 6f 70 74 69 6f 6e 61  lumn can optiona
f4d0: 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a  lly be followed.
f4e0: 62 79 20 61 72 67 75 6d 65 6e 74 73 2c 20 65 61  by arguments, ea
f4f0: 63 68 20 6f 66 20 77 68 69 63 68 20 69 73 20 61  ch of which is a
f500: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6e 6f 6e   sequence of non
f510: 2d 73 70 61 63 65 20 63 68 61 72 61 63 74 65 72  -space character
f520: 73 2e 0a 5e 41 6c 6c 20 61 72 67 75 6d 65 6e 74  s..^All argument
f530: 73 20 61 72 65 20 70 72 65 63 65 64 65 64 20 62  s are preceded b
f540: 79 20 61 20 73 69 6e 67 6c 65 20 73 70 61 63 65  y a single space
f550: 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69 7a 65 64 20  ..^Unrecognized 
f560: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 73 69  arguments are si
f570: 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a  lently ignored..
f580: 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 75 6e 6f  .<p>^If the "uno
f590: 72 64 65 72 65 64 22 20 61 72 67 75 6d 65 6e 74  rdered" argument
f5a0: 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65   is present, the
f5b0: 6e 20 74 68 65 20 71 75 65 72 79 20 70 6c 61 6e  n the query plan
f5c0: 6e 65 72 20 61 73 73 75 6d 65 73 0a 74 68 61 74  ner assumes.that
f5d0: 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 75 6e   the index is un
f5e0: 6f 72 64 65 72 65 64 20 61 6e 64 20 77 69 6c 6c  ordered and will
f5f0: 20 6e 6f 74 20 75 73 65 20 74 68 65 20 69 6e 64   not use the ind
f600: 65 78 20 66 6f 72 20 61 20 72 61 6e 67 65 20 71  ex for a range q
f610: 75 65 72 79 0a 6f 72 20 66 6f 72 20 73 6f 72 74  uery.or for sort
f620: 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73  ing...<p>^The "s
f630: 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d 65 6e 74 20  z=NNN" argument 
f640: 28 77 68 65 72 65 20 4e 4e 4e 20 72 65 70 72 65  (where NNN repre
f650: 73 65 6e 74 73 20 61 20 73 65 71 75 65 6e 63 65  sents a sequence
f660: 20 6f 66 20 31 20 6f 72 20 6d 6f 72 65 20 64 69   of 1 or more di
f670: 67 69 74 73 29 0a 6d 65 61 6e 73 20 74 68 61 74  gits).means that
f680: 20 74 68 65 20 61 76 65 72 61 67 65 20 72 6f 77   the average row
f690: 20 73 69 7a 65 20 6f 76 65 72 20 61 6c 6c 20 72   size over all r
f6a0: 65 63 6f 72 64 73 20 6f 66 20 74 68 65 20 74 61  ecords of the ta
f6b0: 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 69 73 20  ble or.index is 
f6c0: 4e 4e 4e 20 62 79 74 65 73 20 70 65 72 20 72 6f  NNN bytes per ro
f6d0: 77 2e 20 20 5e 54 68 65 20 53 51 4c 69 74 65 20  w.  ^The SQLite 
f6e0: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69  query planner mi
f6f0: 67 68 74 20 75 73 65 20 74 68 65 0a 65 73 74 69  ght use the.esti
f700: 6d 61 74 65 64 20 72 6f 77 20 73 69 7a 65 20 69  mated row size i
f710: 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 6f 76 69  nformation provi
f720: 64 65 64 20 62 79 20 74 68 65 20 22 73 7a 3d 4e  ded by the "sz=N
f730: 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f 20 68 65 6c  NN" token.to hel
f740: 70 20 69 74 20 63 68 6f 6f 73 65 20 73 6d 61 6c  p it choose smal
f750: 6c 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ler tables and i
f760: 6e 64 65 78 65 73 20 74 68 61 74 20 72 65 71 75  ndexes that requ
f770: 69 72 65 20 6c 65 73 73 20 64 69 73 6b 20 49 2f  ire less disk I/
f780: 4f 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70 72 65  O...<p>^(The pre
f790: 73 65 6e 63 65 20 6f 66 20 74 68 65 20 22 6e 6f  sence of the "no
f7a0: 73 6b 69 70 73 63 61 6e 22 20 74 6f 6b 65 6e 20  skipscan" token 
f7b0: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  on the sqlite_st
f7c0: 61 74 31 2e 73 74 61 74 20 66 69 65 6c 64 0a 6f  at1.stat field.o
f7d0: 66 20 61 6e 20 69 6e 64 65 78 20 70 72 65 76 65  f an index preve
f7e0: 6e 74 73 20 74 68 61 74 20 69 6e 64 65 78 20 66  nts that index f
f7f0: 72 6f 6d 20 62 65 69 6e 67 20 75 73 65 64 20 77  rom being used w
f800: 69 74 68 20 74 68 65 0a 5b 73 6b 69 70 2d 73 63  ith the.[skip-sc
f810: 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5d  an optimization]
f820: 2e 29 5e 0a 0a 3c 70 3e 4e 65 77 20 74 65 78 74  .)^..<p>New text
f830: 20 74 6f 6b 65 6e 73 20 6d 61 79 20 62 65 20 61   tokens may be a
f840: 64 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64 20  dded to the end 
f850: 6f 66 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75  of the stat colu
f860: 6d 6e 20 69 6e 20 66 75 74 75 72 65 0a 65 6e 68  mn in future.enh
f870: 61 6e 63 65 6d 65 6e 74 73 20 74 6f 20 53 51 4c  ancements to SQL
f880: 69 74 65 2e 20 20 46 6f 72 20 63 6f 6d 70 61 74  ite.  For compat
f890: 69 62 69 6c 69 74 79 2c 20 75 6e 72 65 63 6f 67  ibility, unrecog
f8a0: 6e 69 7a 65 64 20 74 6f 6b 65 6e 73 20 61 74 20  nized tokens at 
f8b0: 74 68 65 20 65 6e 64 0a 6f 66 20 74 68 65 20 73  the end.of the s
f8c0: 74 61 74 20 63 6f 6c 75 6d 6e 20 61 72 65 20 73  tat column are s
f8d0: 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e  ilently ignored.
f8e0: 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 73 71  ..<p>^(If the sq
f8f0: 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63  lite_stat1.idx c
f900: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2c 20 74  olumn is NULL, t
f910: 68 65 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73  hen the sqlite_s
f920: 74 61 74 31 2e 73 74 61 74 0a 63 6f 6c 75 6d 6e  tat1.stat.column
f930: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
f940: 6c 65 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  le integer which
f950: 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
f960: 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f  ate number of.ro
f970: 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
f980: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 73 71  identified by sq
f990: 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 2e 29  lite_stat1.tbl.)
f9a0: 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
f9b0: 65 6e 74 20 73 74 61 74 32 74 61 62 20 7b 73 71  ent stat2tab {sq
f9c0: 6c 69 74 65 5f 73 74 61 74 32 7d 3c 2f 74 63 6c  lite_stat2}</tcl
f9d0: 3e 0a 3c 68 34 3e 32 2e 36 2e 34 20 54 68 65 20  >.<h4>2.6.4 The 
f9e0: 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62  sqlite_stat2 tab
f9f0: 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  le</h4>..<p>The 
fa00: 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69 73 20  sqlite_stat2 is 
fa10: 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e 64  only created and
fa20: 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66   is only used if
fa30: 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
fa40: 6c 65 64 0a 77 69 74 68 20 53 51 4c 49 54 45 5f  led.with SQLITE_
fa50: 45 4e 41 42 4c 45 5f 53 54 41 54 32 20 61 6e 64  ENABLE_STAT2 and
fa60: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 76   if the SQLite v
fa70: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73  ersion number is
fa80: 20 62 65 74 77 65 65 6e 0a 33 2e 36 2e 31 38 20   between.3.6.18 
fa90: 61 6e 64 20 33 2e 37 2e 38 2e 20 20 54 68 65 20  and 3.7.8.  The 
faa0: 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62  sqlite_stat2 tab
fab0: 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 72 65  le is neither re
fac0: 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20 62  ad nor written b
fad0: 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66  y any.version of
fae0: 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20 33   SQLite before 3
faf0: 2e 36 2e 31 38 20 6e 6f 72 20 61 66 74 65 72 20  .6.18 nor after 
fb00: 33 2e 37 2e 38 2e 0a 54 68 65 20 73 71 6c 69 74  3.7.8..The sqlit
fb10: 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 63 6f  e_stat2 table co
fb20: 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61  ntains additiona
fb30: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62  l information.ab
fb40: 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62 75  out the distribu
fb50: 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74  tion of keys wit
fb60: 68 69 6e 20 61 6e 20 69 6e 64 65 78 2e 0a 54 68  hin an index..Th
fb70: 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20  e schema of the 
fb80: 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62  sqlite_stat2 tab
fb90: 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  le is as follows
fba0: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
fbb0: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
fbc0: 45 20 73 71 6c 69 74 65 5f 73 74 61 74 32 28 74  E sqlite_stat2(t
fbd0: 62 6c 2c 69 64 78 2c 73 61 6d 70 6c 65 6e 6f 2c  bl,idx,sampleno,
fbe0: 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c  sample);.</pre><
fbf0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
fc00: 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
fc10: 32 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 61 6e 64  2.idx column and
fc20: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
fc30: 32 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 6e 20  2.tbl column in 
fc40: 65 61 63 68 20 0a 72 6f 77 20 6f 66 20 74 68 65  each .row of the
fc50: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
fc60: 62 6c 65 20 69 64 65 6e 74 69 66 79 20 61 6e 20  ble identify an 
fc70: 69 6e 64 65 78 20 64 65 73 63 72 69 62 65 64 20  index described 
fc80: 62 79 20 74 68 61 74 20 72 6f 77 2e 0a 54 68 65  by that row..The
fc90: 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79 20 31  re are usually 1
fca0: 30 20 72 6f 77 73 20 69 6e 20 74 68 65 20 73 71  0 rows in the sq
fcb0: 6c 69 74 65 5f 73 74 61 74 32 0a 74 61 62 6c 65  lite_stat2.table
fcc0: 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 2e   for each index.
fcd0: 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
fce0: 73 74 61 74 32 20 65 6e 74 72 69 65 73 20 66 6f  stat2 entries fo
fcf0: 72 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74 20  r an index that 
fd00: 68 61 76 65 20 73 71 6c 69 74 65 5f 73 74 61 74  have sqlite_stat
fd10: 32 2e 73 61 6d 70 6c 65 6e 6f 0a 62 65 74 77 65  2.sampleno.betwe
fd20: 65 6e 20 30 20 61 6e 64 20 39 20 69 6e 63 6c 75  en 0 and 9 inclu
fd30: 73 69 76 65 20 61 72 65 20 73 61 6d 70 6c 65 73  sive are samples
fd40: 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
fd50: 74 20 6b 65 79 20 76 61 6c 75 65 20 69 6e 20 74  t key value in t
fd60: 68 65 0a 69 6e 64 65 78 20 74 61 6b 65 6e 20 61  he.index taken a
fd70: 74 20 65 76 65 6e 6c 79 20 73 70 61 63 65 64 20  t evenly spaced 
fd80: 70 6f 69 6e 74 73 20 61 6c 6f 6e 67 20 74 68 65  points along the
fd90: 20 69 6e 64 65 78 2e 0a 4c 65 74 20 43 20 62 65   index..Let C be
fda0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
fdb0: 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
fdc0: 2e 0a 54 68 65 6e 20 74 68 65 20 73 61 6d 70 6c  ..Then the sampl
fdd0: 65 64 20 72 6f 77 73 20 61 72 65 20 67 69 76 65  ed rows are give
fde0: 6e 20 62 79 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  n by..<blockquot
fdf0: 65 3e 0a 20 20 20 20 20 72 6f 77 6e 75 6d 62 65  e>.     rownumbe
fe00: 72 20 3d 20 28 69 2a 43 2a 32 20 2b 20 43 29 2f  r = (i*C*2 + C)/
fe10: 32 30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  20.</blockquote>
fe20: 0a 0a 3c 70 3e 54 68 65 20 76 61 72 69 61 62 6c  ..<p>The variabl
fe30: 65 20 69 20 69 6e 20 74 68 65 20 70 72 65 76 69  e i in the previ
fe40: 6f 75 73 20 65 78 70 72 65 73 73 69 6f 6e 20 76  ous expression v
fe50: 61 72 69 65 73 20 62 65 74 77 65 65 6e 20 30 20  aries between 0 
fe60: 61 6e 64 20 39 2e 0a 43 6f 6e 63 65 70 74 75 61  and 9..Conceptua
fe70: 6c 6c 79 2c 20 74 68 65 20 69 6e 64 65 78 20 73  lly, the index s
fe80: 70 61 63 65 20 69 73 20 64 69 76 69 64 65 64 20  pace is divided 
fe90: 69 6e 74 6f 0a 31 30 20 75 6e 69 66 6f 72 6d 20  into.10 uniform 
fea0: 62 75 63 6b 65 74 73 20 61 6e 64 20 74 68 65 20  buckets and the 
feb0: 73 61 6d 70 6c 65 73 20 61 72 65 20 74 68 65 20  samples are the 
fec0: 6d 69 64 64 6c 65 20 72 6f 77 20 66 72 6f 6d 20  middle row from 
fed0: 65 61 63 68 20 62 75 63 6b 65 74 2e 0a 0a 3c 70  each bucket...<p
fee0: 3e 54 68 65 20 66 6f 72 6d 61 74 20 66 6f 72 20  >The format for 
fef0: 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69 73 20  sqlite_stat2 is 
ff00: 72 65 63 6f 72 64 65 64 20 68 65 72 65 20 66 6f  recorded here fo
ff10: 72 20 6c 65 67 61 63 79 20 72 65 66 65 72 65 6e  r legacy referen
ff20: 63 65 2e 20 20 0a 52 65 63 65 6e 74 20 76 65 72  ce.  .Recent ver
ff30: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
ff40: 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72  no longer suppor
ff50: 74 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 61  t sqlite_stat2 a
ff60: 6e 64 20 74 68 65 0a 73 71 6c 69 74 65 5f 73 74  nd the.sqlite_st
ff70: 61 74 32 20 74 61 62 6c 65 2c 20 69 74 20 69 73  at2 table, it is
ff80: 20 65 78 69 73 74 73 2c 20 69 73 20 73 69 6d 70   exists, is simp
ff90: 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63  ly ignored...<tc
ffa0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74  l>hd_fragment st
ffb0: 61 74 33 74 61 62 20 7b 73 71 6c 69 74 65 5f 73  at3tab {sqlite_s
ffc0: 74 61 74 33 7d 20 53 51 4c 49 54 45 5f 53 54 41  tat3} SQLITE_STA
ffd0: 54 33 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36  T3</tcl>.<h4>2.6
ffe0: 2e 35 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .5 The sqlite_st
fff0: 61 74 33 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a  at3 table</h4>..
10000 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
10010 61 74 33 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  at3 is only used
10020 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f   if SQLite is co
10030 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c  mpiled.with [SQL
10040 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
10050 5d 20 6f 72 20 5b 53 51 4c 49 54 45 5f 45 4e 41  ] or [SQLITE_ENA
10060 42 4c 45 5f 53 54 41 54 34 5d 0a 61 6e 64 20 69  BLE_STAT4].and i
10070 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72  f the SQLite ver
10080 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 33  sion number is 3
10090 2e 37 2e 39 20 6f 72 20 67 72 65 61 74 65 72 2e  .7.9 or greater.
100a0 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
100b0 33 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68  3 table is neith
100c0 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74  er read nor writ
100d0 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69  ten by any.versi
100e0 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66  on of SQLite bef
100f0 6f 72 65 20 33 2e 37 2e 39 2e 0a 49 66 20 74 68  ore 3.7.9..If th
10100 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  e [SQLITE_ENABLE
10110 5f 53 54 41 54 34 5d 20 63 6f 6d 70 69 6c 65 2d  _STAT4] compile-
10120 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
10130 73 65 64 20 61 6e 64 20 74 68 65 0a 53 51 4c 69  sed and the.SQLi
10140 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  te version numbe
10150 72 20 69 73 20 33 2e 38 2e 31 20 6f 72 20 67 72  r is 3.8.1 or gr
10160 65 61 74 65 72 2c 20 74 68 65 6e 20 73 71 6c 69  eater, then sqli
10170 74 65 5f 73 74 61 74 33 20 6d 69 67 68 74 0a 62  te_stat3 might.b
10180 65 20 72 65 61 64 20 62 75 74 20 6e 6f 74 20 77  e read but not w
10190 72 69 74 74 65 6e 2e 0a 54 68 65 20 73 71 6c 69  ritten..The sqli
101a0 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 63  te_stat3 table c
101b0 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e  ontains addition
101c0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61  al information.a
101d0 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62  bout the distrib
101e0 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69  ution of keys wi
101f0 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2c 20 69  thin an index, i
10200 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
10210 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65  the.query planne
10220 72 20 63 61 6e 20 75 73 65 20 74 6f 20 64 65 76  r can use to dev
10230 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20 66  ise better and f
10240 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f  aster query algo
10250 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63  rithms..^(The sc
10260 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69  hema of the sqli
10270 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
10280 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  s as follows:..<
10290 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
102a0 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  .CREATE TABLE sq
102b0 6c 69 74 65 5f 73 74 61 74 33 28 74 62 6c 2c 69  lite_stat3(tbl,i
102c0 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c  dx,nEq,nLt,nDLt,
102d0 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c  sample);.</pre><
102e0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
102f0 3c 70 3e 54 68 65 72 65 20 61 72 65 20 75 73 75  <p>There are usu
10300 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65 20 65 6e  ally multiple en
10310 74 72 69 65 73 20 69 6e 20 74 68 65 20 73 71 6c  tries in the sql
10320 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
10330 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 2e 0a  for each index..
10340 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ^(The sqlite_sta
10350 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e  t3.sample column
10360 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c 75 65   holds the value
10370 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
10380 74 20 66 69 65 6c 64 20 6f 66 20 61 6e 0a 69 6e  t field of an.in
10390 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20 62  dex identified b
103a0 79 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 69  y sqlite_stat3.i
103b0 64 78 20 61 6e 64 20 73 71 6c 69 74 65 5f 73 74  dx and sqlite_st
103c0 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e 28 54 68 65  at3.tbl.)^.^(The
103d0 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 45   sqlite_stat3.nE
103e0 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74  q column holds t
103f0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e  he approximate.n
10400 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
10410 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 77 68   in the index wh
10420 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  ose left-most co
10430 6c 75 6d 6e 20 65 78 61 63 74 6c 79 20 6d 61 74  lumn exactly mat
10440 63 68 65 73 0a 74 68 65 20 73 61 6d 70 6c 65 2e  ches.the sample.
10450 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  )^.^(The sqlite_
10460 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c 64 73 20  stat3.nLt holds 
10470 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20  the approximate 
10480 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
10490 73 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20 77  s in the.index w
104a0 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63  hose left-most c
104b0 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73 20 74 68  olumn is less th
104c0 61 6e 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e  an the sample.)^
104d0 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .^(The sqlite_st
104e0 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20  at3.nDLt column 
104f0 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78  holds the approx
10500 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20  imate.number of 
10510 64 69 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f  distinct left-mo
10520 73 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  st entries in th
10530 65 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  e index that are
10540 20 6c 65 73 73 20 74 68 61 6e 0a 74 68 65 20 73   less than.the s
10550 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68  ample.)^..<p>^Th
10560 65 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61 72  ere can be an ar
10570 62 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20 6f  bitrary number o
10580 66 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 65  f sqlite_stat3 e
10590 6e 74 72 69 65 73 20 70 65 72 20 69 6e 64 65 78  ntries per index
105a0 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20  ..The [ANALYZE] 
105b0 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70  command will typ
105c0 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 20  ically generate 
105d0 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
105e0 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e  les.that contain
105f0 20 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64 20   between 10 and 
10600 34 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74 20  40 samples that 
10610 61 72 65 20 64 69 73 74 72 69 62 75 74 65 64 20  are distributed 
10620 61 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20 73  across.the key s
10630 70 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c 61  pace and with la
10640 72 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a  rge nEq values..
10650 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65 6c 6c 2d  .<p>^(In a well-
10660 66 6f 72 6d 65 64 20 73 71 6c 69 74 65 5f 73 74  formed sqlite_st
10670 61 74 33 20 74 61 62 6c 65 2c 20 74 68 65 20 73  at3 table, the s
10680 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e 79 20 73  amples for any s
10690 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d 75 73 74  ingle.index must
106a0 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 73   appear in the s
106b0 61 6d 65 20 6f 72 64 65 72 20 74 68 61 74 20 74  ame order that t
106c0 68 65 79 20 6f 63 63 75 72 20 69 6e 20 74 68 65  hey occur in the
106d0 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20 6f 74 68   index.  .In oth
106e0 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65  er words, if the
106f0 20 65 6e 74 72 79 20 77 69 74 68 20 6c 65 66 74   entry with left
10700 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 53 31 20  -most column S1 
10710 69 73 20 65 61 72 6c 69 65 72 20 69 6e 0a 74 68  is earlier in.th
10720 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 74  e index b-tree t
10730 68 61 6e 20 74 68 65 0a 65 6e 74 72 79 20 77 69  han the.entry wi
10740 74 68 20 6c 65 66 2d 6d 6f 73 74 20 63 6f 6c 75  th lef-most colu
10750 6d 6e 20 53 32 2c 20 74 68 65 6e 20 69 6e 20 74  mn S2, then in t
10760 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
10770 74 61 62 6c 65 2c 20 0a 73 61 6d 70 6c 65 20 53  table, .sample S
10780 31 20 6d 75 73 74 20 68 61 76 65 20 61 20 73 6d  1 must have a sm
10790 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68 61 6e  aller rowid than
107a0 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c   sample S2.)^..<
107b0 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
107c0 73 74 61 74 34 74 61 62 20 7b 73 71 6c 69 74 65  stat4tab {sqlite
107d0 5f 73 74 61 74 34 7d 20 53 51 4c 49 54 45 5f 53  _stat4} SQLITE_S
107e0 54 41 54 34 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32  TAT4</tcl>.<h4>2
107f0 2e 36 2e 36 20 54 68 65 20 73 71 6c 69 74 65 5f  .6.6 The sqlite_
10800 73 74 61 74 34 20 74 61 62 6c 65 3c 2f 68 34 3e  stat4 table</h4>
10810 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
10820 73 74 61 74 34 20 69 73 20 6f 6e 6c 79 20 63 72  stat4 is only cr
10830 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c  eated and is onl
10840 79 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65  y used if SQLite
10850 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74   is compiled.wit
10860 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  h [SQLITE_ENABLE
10870 5f 53 54 41 54 34 5d 20 61 6e 64 20 69 66 20 74  _STAT4] and if t
10880 68 65 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  he SQLite versio
10890 6e 20 6e 75 6d 62 65 72 20 69 73 0a 33 2e 38 2e  n number is.3.8.
108a0 31 20 6f 72 20 67 72 65 61 74 65 72 2e 20 20 54  1 or greater.  T
108b0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
108c0 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72  table is neither
108d0 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65   read nor writte
108e0 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e  n by any.version
108f0 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72   of SQLite befor
10900 65 20 33 2e 38 2e 31 2e 0a 54 68 65 20 73 71 6c  e 3.8.1..The sql
10910 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20  ite_stat4 table 
10920 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f  contains additio
10930 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  nal information.
10940 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69  about the distri
10950 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77  bution of keys w
10960 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 20 6f  ithin an index o
10970 72 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69  r the distributi
10980 6f 6e 20 6f 66 0a 6b 65 79 73 20 69 6e 20 74 68  on of.keys in th
10990 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 66  e primary key of
109a0 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
109b0 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20 71 75  D] table..The qu
109c0 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20  ery planner can 
109d0 73 6f 6d 65 74 69 6d 65 73 20 75 73 65 20 74 68  sometimes use th
109e0 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  e additional inf
109f0 6f 72 6d 61 74 69 6f 6e 20 69 6e 0a 74 68 65 20  ormation in.the 
10a00 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
10a10 6c 65 20 74 6f 20 64 65 76 69 73 65 20 62 65 74  le to devise bet
10a20 74 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 71  ter and faster q
10a30 75 65 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e  uery algorithms.
10a40 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20 6f 66  .^(The schema of
10a50 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10a60 34 20 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f  4 table is as fo
10a70 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  llows:..<blockqu
10a80 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
10a90 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74   TABLE sqlite_st
10aa0 61 74 34 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c  at4(tbl,idx,nEq,
10ab0 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29  nLt,nDLt,sample)
10ac0 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
10ad0 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72  uote>)^..<p>Ther
10ae0 65 20 61 72 65 20 74 79 70 69 63 61 6c 6c 79 20  e are typically 
10af0 62 65 74 77 65 65 6e 20 31 30 20 74 6f 20 34 30  between 10 to 40
10b00 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
10b10 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
10b20 6c 65 20 66 6f 72 0a 65 61 63 68 20 69 6e 64 65  le for.each inde
10b30 78 20 66 6f 72 20 77 68 69 63 68 20 73 74 61 74  x for which stat
10b40 69 73 74 69 63 73 20 61 72 65 20 61 76 61 69 6c  istics are avail
10b50 61 62 6c 65 2c 20 68 6f 77 65 76 65 72 20 74 68  able, however th
10b60 65 73 65 20 6c 69 6d 69 74 73 20 61 72 65 0a 6e  ese limits are.n
10b70 6f 74 20 68 61 72 64 20 62 6f 75 6e 64 73 2e 0a  ot hard bounds..
10b80 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
10b90 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  the columns in t
10ba0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
10bb0 74 61 62 6c 65 20 61 72 65 20 61 73 20 66 6f 6c  table are as fol
10bc0 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a  lows:..<center>.
10bd0 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30  <table border="0
10be0 22 20 77 69 64 74 68 3d 22 31 30 30 25 22 20 63  " width="100%" c
10bf0 65 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e  ellpadding="10">
10c00 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
10c10 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
10c20 68 74 22 3e 74 62 6c 3a 3c 2f 74 64 3e 0a 20 20  ht">tbl:</td>.  
10c30 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69    <td>^(The sqli
10c40 74 65 5f 73 74 61 74 34 2e 74 62 6c 20 63 6f 6c  te_stat4.tbl col
10c50 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f  umn holds name o
10c60 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
10c70 20 6f 77 6e 73 0a 20 20 20 20 74 68 65 20 69 6e   owns.    the in
10c80 64 65 78 20 74 68 61 74 20 74 68 65 20 72 6f 77  dex that the row
10c90 20 64 65 73 63 72 69 62 65 73 29 5e 0a 0a 3c 74   describes)^..<t
10ca0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
10cb0 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
10cc0 3e 69 64 78 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c  >idx:</td>.    <
10cd0 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  td>^(The sqlite_
10ce0 73 74 61 74 34 2e 69 64 78 20 63 6f 6c 75 6d 6e  stat4.idx column
10cf0 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20 74   holds name of t
10d00 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 74 68  he index that th
10d10 65 0a 20 20 20 20 72 6f 77 20 64 65 73 63 72 69  e.    row descri
10d20 62 65 73 2c 20 6f 72 20 69 6e 20 74 68 65 20 63  bes, or in the c
10d30 61 73 65 20 6f 66 0a 20 20 20 20 61 6e 20 73 71  ase of.    an sq
10d40 6c 69 74 65 5f 73 74 61 74 34 20 65 6e 74 72 79  lite_stat4 entry
10d50 20 66 6f 72 20 61 20 5b 57 49 54 48 4f 55 54 20   for a [WITHOUT 
10d60 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20 74 68  ROWID] table, th
10d70 65 0a 20 20 20 20 6e 61 6d 65 20 6f 66 20 74 68  e.    name of th
10d80 65 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 29  e table itself.)
10d90 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ^..<tr><td valig
10da0 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
10db0 69 67 68 74 22 3e 73 61 6d 70 6c 65 3a 3c 2f 74  ight">sample:</t
10dc0 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65  d>.    <td>^(The
10dd0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61   sqlite_stat4.sa
10de0 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  mple column hold
10df0 73 20 61 20 42 4c 4f 42 0a 20 20 20 20 69 6e 20  s a BLOB.    in 
10e00 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d  the [record form
10e10 61 74 5d 20 74 68 61 74 20 65 6e 63 6f 64 65 73  at] that encodes
10e20 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c   the indexed col
10e30 75 6d 6e 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  umns followed by
10e40 0a 20 20 20 20 74 68 65 20 72 6f 77 69 64 20 66  .    the rowid f
10e50 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65  or a rowid table
10e60 20 6f 72 20 62 79 20 74 68 65 20 63 6f 6c 75 6d   or by the colum
10e70 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72  ns of the primar
10e80 79 20 6b 65 79 20 0a 20 20 20 20 66 6f 72 20 61  y key .    for a
10e90 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
10ea0 61 62 6c 65 2e 29 5e 0a 20 20 20 20 5e 28 54 68  able.)^.    ^(Th
10eb0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73  e sqlite_stat4.s
10ec0 61 6d 70 6c 65 20 42 4c 4f 42 20 66 6f 72 20 74  ample BLOB for t
10ed0 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  he WITHOUT ROWID
10ee0 20 74 61 62 6c 65 20 69 74 73 65 6c 66 20 0a 20   table itself . 
10ef0 20 20 20 63 6f 6e 74 61 69 6e 73 20 6a 75 73 74     contains just
10f00 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
10f10 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e  the primary key.
10f20 29 5e 0a 20 20 20 20 4c 65 74 20 74 68 65 20 6e  )^.    Let the n
10f30 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
10f40 20 65 6e 63 6f 64 65 64 20 62 79 20 74 68 65 20   encoded by the 
10f50 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d  sqlite_stat4.sam
10f60 70 6c 65 20 62 6c 6f 62 20 62 65 20 4e 2e 0a 20  ple blob be N.. 
10f70 20 20 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20     ^For indexes 
10f80 6f 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72  on an ordinary r
10f90 6f 77 69 64 20 74 61 62 6c 65 2c 20 4e 20 77 69  owid table, N wi
10fa0 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74  ll be one more t
10fb0 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 0a  han the number .
10fc0 20 20 20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69      of columns i
10fd0 6e 64 65 78 65 64 2e 0a 20 20 20 20 5e 46 6f 72  ndexed..    ^For
10fe0 20 69 6e 64 65 78 65 73 20 6f 6e 20 57 49 54 48   indexes on WITH
10ff0 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73  OUT ROWID tables
11000 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68 65 20  , N will be the 
11010 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
11020 73 0a 20 20 20 20 69 6e 64 65 78 65 64 20 70 6c  s.    indexed pl
11030 75 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  us the number of
11040 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
11050 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 20 20 20  primary key..   
11060 20 5e 46 6f 72 20 61 20 57 49 54 48 4f 55 54 20   ^For a WITHOUT 
11070 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 4e 20 77  ROWID table, N w
11080 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65  ill be the numbe
11090 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
110a0 74 68 65 0a 20 20 20 20 70 72 69 6d 61 72 79 20  the.    primary 
110b0 6b 65 79 2e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61  key...<tr><td va
110c0 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
110d0 3d 22 72 69 67 68 74 22 3e 6e 45 71 3a 3c 2f 74  ="right">nEq:</t
110e0 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65  d>.    <td>^(The
110f0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 45   sqlite_stat4.nE
11100 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61  q column holds a
11110 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74 65 67   list of N integ
11120 65 72 73 20 77 68 65 72 65 20 0a 20 20 20 20 74  ers where .    t
11130 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 20  he K-th integer 
11140 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
11150 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  te number of ent
11160 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65  ries in the inde
11170 78 0a 20 20 20 20 77 68 6f 73 65 20 6c 65 66 74  x.    whose left
11180 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20  -most K columns 
11190 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68  exactly match th
111a0 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  e K left-most co
111b0 6c 75 6d 6e 73 0a 20 20 20 20 6f 66 20 74 68 65  lumns.    of the
111c0 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e   sample.)^..<tr>
111d0 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
111e0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e   align="right">n
111f0 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  Lt:</td>.    <td
11200 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
11210 61 74 34 2e 6e 4c 74 20 63 6f 6c 75 6d 6e 20 68  at4.nLt column h
11220 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20 4e  olds a list of N
11230 20 69 6e 74 65 67 65 72 73 20 77 68 65 72 65 0a   integers where.
11240 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69 6e 74      the K-th int
11250 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70 72  eger is the appr
11260 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
11270 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  f entries in the
11280 0a 20 20 20 20 69 6e 64 65 78 20 77 68 6f 73 65  .    index whose
11290 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c   K left-most col
112a0 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63 74  umns are collect
112b0 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61 6e 20  ively less than 
112c0 74 68 65 20 0a 20 20 20 20 4b 20 6c 65 66 74 2d  the .    K left-
112d0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  most columns of 
112e0 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c  the sample.)^..<
112f0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
11300 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
11310 22 3e 6e 44 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20  ">nDLt:</td>.   
11320 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74   <td>^(The sqlit
11330 65 5f 73 74 61 74 34 2e 6e 44 4c 74 20 63 6f 6c  e_stat4.nDLt col
11340 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73 74  umn holds a list
11350 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73 20 77   of N integers w
11360 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b 2d 74  here.    the K-t
11370 68 20 69 6e 74 65 67 65 72 73 20 69 73 20 74 68  h integers is th
11380 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a 20 20  e approximate.  
11390 20 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72    number of entr
113a0 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ies in the index
113b0 20 74 68 61 74 20 61 72 65 20 64 69 73 74 69 6e   that are distin
113c0 63 74 20 69 6e 20 74 68 65 20 66 69 72 73 74 20  ct in the first 
113d0 4b 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 0a 20 20  K columns and.  
113e0 20 20 74 68 61 74 20 61 72 65 20 77 68 6f 73 65    that are whose
113f0 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c   left-most K col
11400 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63 74  umns are collect
11410 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61 6e 20  ively less than 
11420 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a 20 20  the left-most.  
11430 20 20 4b 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74    K columns of t
11440 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 3c 2f 74  he sample.)^.</t
11450 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a  able>.</center>.
11460 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
11470 74 61 74 34 20 69 73 20 61 20 67 65 6e 65 72 61  tat4 is a genera
11480 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  lization of the 
11490 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
114a0 6c 65 2e 20 20 54 68 65 0a 73 71 6c 69 74 65 5f  le.  The.sqlite_
114b0 73 74 61 74 33 20 74 61 62 6c 65 20 70 72 6f 76  stat3 table prov
114c0 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ides information
114d0 20 61 62 6f 75 74 20 74 68 65 20 6c 65 66 74 2d   about the left-
114e0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  most column of a
114f0 6e 0a 69 6e 64 65 78 20 77 68 65 72 65 61 73 20  n.index whereas 
11500 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  the sqlite_stat4
11510 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65 73 20   table provides 
11520 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11530 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66  t all columns.of
11540 20 74 68 65 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e   the index...<p>
11550 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e  ^There can be an
11560 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65   arbitrary numbe
11570 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74  r of sqlite_stat
11580 34 20 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e  4 entries per in
11590 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a  dex..The [ANALYZ
115a0 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  E] command will 
115b0 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  typically genera
115c0 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  te sqlite_stat4 
115d0 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74  tables.that cont
115e0 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61  ain between 10 a
115f0 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68  nd 40 samples th
11600 61 74 20 61 72 65 20 64 69 73 74 72 69 62 75 74  at are distribut
11610 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65  ed across.the ke
11620 79 20 73 70 61 63 65 20 61 6e 64 20 77 69 74 68  y space and with
11630 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65   large nEq value
11640 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65  s...<p>^(In a we
11650 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74 65  ll-formed sqlite
11660 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20 74 68  _stat4 table, th
11670 65 20 73 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e  e samples for an
11680 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d  y single.index m
11690 75 73 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  ust appear in th
116a0 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68 61  e same order tha
116b0 74 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20  t they occur in 
116c0 74 68 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20  the index.  .In 
116d0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
116e0 65 6e 74 72 79 20 53 31 20 69 73 20 65 61 72 6c  entry S1 is earl
116f0 69 65 72 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ier in the index
11700 20 62 2d 74 72 65 65 20 74 68 61 6e 20 0a 65 6e   b-tree than .en
11710 74 72 79 20 53 32 2c 20 74 68 65 6e 20 69 6e 20  try S2, then in 
11720 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  the sqlite_stat4
11730 20 74 61 62 6c 65 2c 20 73 61 6d 70 6c 65 20 53   table, sample S
11740 31 20 6d 75 73 74 20 68 61 76 65 20 61 0a 73 6d  1 must have a.sm
11750 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68 61 6e  aller rowid than
11760 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c   sample S2.)^..<
11770 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
11780 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e 61 6c 20  rollbackjournal 
11790 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61  {rollback journa
117a0 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a  l format}</tcl>.
117b0 3c 68 32 3e 33 2e 30 20 54 68 65 20 52 6f 6c 6c  <h2>3.0 The Roll
117c0 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f 68 32  back Journal</h2
117d0 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c 62 61  >..<p>The rollba
117e0 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 61 20  ck journal is a 
117f0 66 69 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  file associated 
11800 77 69 74 68 20 65 61 63 68 20 53 51 4c 69 74 65  with each SQLite
11810 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 74   database.file t
11820 68 61 74 20 68 6f 6c 64 20 69 6e 66 6f 72 6d 61  hat hold informa
11830 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 72 65 73  tion used to res
11840 74 6f 72 65 20 74 68 65 20 64 61 74 61 62 61 73  tore the databas
11850 65 20 66 69 6c 65 20 74 6f 20 69 74 73 20 69 6e  e file to its in
11860 69 74 69 61 6c 0a 73 74 61 74 65 20 64 75 72 69  itial.state duri
11870 6e 67 20 74 68 65 20 63 6f 75 72 73 65 20 6f 66  ng the course of
11880 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
11890 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  ^The rollback jo
118a0 75 72 6e 61 6c 20 66 69 6c 65 20 69 73 20 61 6c  urnal file is al
118b0 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20  ways located in 
118c0 74 68 65 20 73 61 6d 65 20 0a 64 69 72 65 63 74  the same .direct
118d0 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62  ory as the datab
118e0 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73  ase.file and has
118f0 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61   the same name a
11900 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
11910 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65  ile but with the
11920 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 6a 6f   string."<tt>-jo
11930 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65  urnal</tt>" appe
11940 6e 64 65 64 2e 20 20 54 68 65 72 65 20 63 61 6e  nded.  There can
11950 20 6f 6e 6c 79 20 62 65 20 61 20 73 69 6e 67 6c   only be a singl
11960 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
11970 61 6c 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69  al.associated wi
11980 74 68 20 61 20 67 69 76 65 20 64 61 74 61 62 61  th a give databa
11990 73 65 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65  se and hence the
119a0 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6f  re can only be o
119b0 6e 65 20 77 72 69 74 65 0a 74 72 61 6e 73 61 63  ne write.transac
119c0 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61 69 6e 73  tion open agains
119d0 74 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62  t a single datab
119e0 61 73 65 20 61 74 20 6f 6e 65 20 74 69 6d 65 2e  ase at one time.
119f0 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 74 72  </p>..<p>If a tr
11a00 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 62 6f  ansaction is abo
11a10 72 74 65 64 20 64 75 65 20 74 6f 20 61 6e 20 61  rted due to an a
11a20 70 70 6c 69 63 61 74 69 6f 6e 20 63 72 61 73 68  pplication crash
11a30 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e 67 0a 73  , an operating.s
11a40 79 73 74 65 6d 20 63 72 61 73 68 2c 20 6f 72 20  ystem crash, or 
11a50 61 20 68 61 72 64 77 61 72 65 20 70 6f 77 65 72  a hardware power
11a60 20 66 61 69 6c 75 72 65 20 6f 72 20 63 72 61 73   failure or cras
11a70 68 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  h, then the data
11a80 62 61 73 65 20 6d 61 79 0a 62 65 20 6c 65 66 74  base may.be left
11a90 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69 73 74   in an inconsist
11aa0 65 6e 74 20 73 74 61 74 65 2e 20 20 5e 54 68 65  ent state.  ^The
11ab0 20 6e 65 78 74 20 74 69 6d 65 20 53 51 4c 69 74   next time SQLit
11ac0 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6f 70  e attempts to op
11ad0 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65 20  en.the database 
11ae0 66 69 6c 65 2c 20 74 68 65 20 70 72 65 73 65 6e  file, the presen
11af0 63 65 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61  ce of the rollba
11b00 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  ck journal file 
11b10 77 69 6c 6c 20 62 65 20 0a 64 65 74 65 63 74 65  will be .detecte
11b20 64 20 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61  d and the journa
11b30 6c 20 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d 61  l will be automa
11b40 74 69 63 61 6c 6c 79 20 70 6c 61 79 65 64 20 62  tically played b
11b50 61 63 6b 20 74 6f 20 72 65 73 74 6f 72 65 20 74  ack to restore t
11b60 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 69  he.database to i
11b70 74 73 20 73 74 61 74 65 20 61 74 20 74 68 65 20  ts state at the 
11b80 73 74 61 72 74 20 6f 66 20 74 68 65 20 69 6e 63  start of the inc
11b90 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74  omplete transact
11ba0 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20  ion.</p>..<p>^A 
11bb0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
11bc0 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65   is only conside
11bd0 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69 64 20  red to be valid 
11be0 69 66 20 69 74 20 65 78 69 73 74 73 20 61 6e 64  if it exists and
11bf0 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c 69  .contains a vali
11c00 64 20 68 65 61 64 65 72 2e 20 20 48 65 6e 63 65  d header.  Hence
11c10 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63   a transaction c
11c20 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 20  an be committed 
11c30 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72 65 65 20  in one.of three 
11c40 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e  ways:.<ol>.<li>^
11c50 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  (The rollback jo
11c60 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20 62  urnal file can b
11c70 65 20 64 65 6c 65 74 65 64 29 5e 2c 0a 3c 6c 69  e deleted)^,.<li
11c80 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20  >^(The rollback 
11c90 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e  journal file can
11ca0 20 62 65 20 74 72 75 6e 63 61 74 65 64 20 74 6f   be truncated to
11cb0 20 7a 65 72 6f 20 6c 65 6e 67 74 68 29 5e 2c 20   zero length)^, 
11cc0 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65 20 68 65 61  or.<li>^(The hea
11cd0 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62  der of the rollb
11ce0 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20  ack journal can 
11cf0 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  be overwritten w
11d00 69 74 68 0a 69 6e 76 61 6c 69 64 20 68 65 61 64  ith.invalid head
11d10 65 72 20 74 65 78 74 20 28 66 6f 72 20 65 78 61  er text (for exa
11d20 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f 73 29  mple, all zeros)
11d30 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 5e 54 68 65 73 65  .)^.</ol>.^These
11d40 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20 63   three ways of c
11d50 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72 61 6e  ommitting a tran
11d60 73 61 63 74 69 6f 6e 20 63 6f 72 72 65 73 70 6f  saction correspo
11d70 6e 64 20 74 6f 20 74 68 65 20 44 45 4c 45 54 45  nd to the DELETE
11d80 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61 6e 64 20  ,.TRUNCATE, and 
11d90 50 45 52 53 49 53 54 20 73 65 74 74 69 6e 67 73  PERSIST settings
11da0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  , respectively, 
11db0 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e 61 6c 5f  of the [journal_
11dc0 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e 0a 3c 2f  mode pragma]..</
11dd0 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69 64 20  p>...<p>A valid 
11de0 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
11df0 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 68   begins with a h
11e00 65 61 64 65 72 20 69 6e 20 74 68 65 20 66 6f 6c  eader in the fol
11e10 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 3a 3c 2f  lowing format:</
11e20 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e  p>..<center>.<i>
11e30 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c  Rollback Journal
11e40 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f   Header Format</
11e50 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69  i><br>.<table wi
11e60 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72  dth="80%" border
11e70 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  =1>.<tr><th>Offs
11e80 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
11e90 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
11ea0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
11eb0 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20  gn=center>0.    
11ec0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
11ed0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20  lign=center>8.  
11ee0 20 20 3c 74 64 3e 48 65 61 64 65 72 20 73 74 72    <td>Header str
11ef0 69 6e 67 3a 20 20 30 78 64 39 2c 20 30 78 64 35  ing:  0xd9, 0xd5
11f00 2c 20 30 78 30 35 2c 20 30 78 66 39 2c 20 30 78  , 0x05, 0xf9, 0x
11f10 32 30 2c 20 30 78 61 31 2c 20 30 78 36 33 2c 20  20, 0xa1, 0x63, 
11f20 30 78 64 37 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  0xd7.<tr><td val
11f30 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
11f40 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 20 76  nter>8.    <td v
11f50 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
11f60 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
11f70 3e 54 68 65 20 22 50 61 67 65 20 43 6f 75 6e 74  >The "Page Count
11f80 22 20 2d 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  " - The number o
11f90 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 6e  f pages in the n
11fa0 65 78 74 20 73 65 67 6d 65 6e 74 20 6f 66 20 74  ext segment of t
11fb0 68 65 20 0a 20 20 20 20 20 20 20 20 6a 6f 75 72  he .        jour
11fc0 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a 20 20  nal, or -1 to.  
11fd0 20 20 20 20 20 20 6d 65 61 6e 20 61 6c 6c 20 63        mean all c
11fe0 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65 20 65 6e  ontent to the en
11ff0 64 20 6f 66 20 74 68 65 20 66 69 6c 65 0a 3c 74  d of the file.<t
12000 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12010 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32   align=center>12
12020 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
12030 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12040 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20 72 61 6e  >4.    <td>A ran
12050 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20 74 68  dom nonce for th
12060 65 20 63 68 65 63 6b 73 75 6d 0a 3c 74 72 3e 3c  e checksum.<tr><
12070 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12080 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 0a 20 20  ign=center>16.  
12090 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
120a0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
120b0 20 20 20 20 3c 74 64 3e 49 6e 69 74 69 61 6c 20      <td>Initial 
120c0 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61  size of the data
120d0 62 61 73 65 20 69 6e 20 70 61 67 65 73 0a 3c 74  base in pages.<t
120e0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
120f0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30   align=center>20
12100 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
12110 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12120 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65 20  >4.    <td>Size 
12130 6f 66 20 61 20 64 69 73 6b 20 73 65 63 74 6f 72  of a disk sector
12140 20 61 73 73 75 6d 65 64 20 62 79 20 74 68 65 20   assumed by the 
12150 70 72 6f 63 65 73 73 20 74 68 61 74 20 77 72 6f  process that wro
12160 74 65 20 74 68 69 73 0a 20 20 20 20 20 20 20 20  te this.        
12170 6a 6f 75 72 6e 61 6c 2e 0a 3c 74 72 3e 3c 74 64  journal..<tr><td
12180 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12190 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20 20 20 20  n=center>24.    
121a0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
121b0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
121c0 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 70 61    <td>Size of pa
121d0 67 65 73 20 69 6e 20 74 68 69 73 20 6a 6f 75 72  ges in this jour
121e0 6e 61 6c 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  nal..</table>.</
121f0 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20 72  center>..<p>^A r
12200 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
12210 68 65 61 64 65 72 20 69 73 20 70 61 64 64 65 64  header is padded
12220 20 77 69 74 68 20 7a 65 72 6f 73 20 6f 75 74 20   with zeros out 
12230 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61  to the size of a
12240 20 0a 73 69 6e 67 6c 65 20 73 65 63 74 6f 72 20   .single sector 
12250 28 61 73 20 64 65 66 69 6e 65 64 20 62 79 20 74  (as defined by t
12260 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20 69  he sector size i
12270 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
12280 20 32 30 29 2e 0a 54 68 65 20 68 65 61 64 65 72   20)..The header
12290 20 69 73 20 69 6e 20 61 20 73 65 63 74 6f 72 20   is in a sector 
122a0 62 79 20 69 74 73 65 6c 66 20 73 6f 20 74 68 61  by itself so tha
122b0 74 20 69 66 20 61 20 70 6f 77 65 72 20 6c 6f 73  t if a power los
122c0 73 20 6f 63 63 75 72 73 20 77 68 69 6c 65 0a 77  s occurs while.w
122d0 72 69 74 69 6e 67 20 74 68 65 20 73 65 63 74 6f  riting the secto
122e0 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  r, information t
122f0 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  hat follows the 
12300 68 65 61 64 65 72 20 77 69 6c 6c 20 62 65 0a 28  header will be.(
12310 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e 64 61 6d  hopefully) undam
12320 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  aged.</p>..<p>^A
12330 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
12340 61 6e 64 20 7a 65 72 6f 20 70 61 64 64 69 6e 67  and zero padding
12350 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72   are zero or mor
12360 65 20 70 61 67 65 20 72 65 63 6f 72 64 73 2e 20  e page records. 
12370 20 5e 45 61 63 68 0a 70 61 67 65 20 72 65 63 6f   ^Each.page reco
12380 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f 70 79  rd stores a copy
12390 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   of the content 
123a0 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d 20 74  of a page from t
123b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
123c0 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73 20 63  .before it was c
123d0 68 61 6e 67 65 64 2e 20 20 5e 54 68 65 20 73 61  hanged.  ^The sa
123e0 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f 74 20  me page may not 
123f0 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68 61 6e  appear more than
12400 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61 20 73   once.within a s
12410 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  ingle rollback j
12420 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c 62  ournal..To rollb
12430 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74  ack an incomplet
12440 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61  e transaction, a
12450 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d 65 72   process.has mer
12460 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68 65 20  ely to read the 
12470 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
12480 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20   from beginning 
12490 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69 74 65  to end and.write
124a0 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69 6e 20   pages found in 
124b0 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61 63 6b  the journal back
124c0 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
124d0 73 65 20 66 69 6c 65 20 61 74 20 74 68 65 0a 61  se file at the.a
124e0 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63 61 74  ppropriate locat
124f0 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74  ion.</p>..<p>Let
12500 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
12510 67 65 20 73 69 7a 65 20 28 74 68 65 20 76 61 6c  ge size (the val
12520 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
12530 72 20 61 74 20 6f 66 66 73 65 74 20 32 34 20 0a  r at offset 24 .
12540 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68  in the journal h
12550 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54 68 65  eader) be N..The
12560 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  n the format of 
12570 61 20 70 61 67 65 20 72 65 63 6f 72 64 20 69 73  a page record is
12580 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
12590 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f  ..<center>.<i>Ro
125a0 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 50  llback Journal P
125b0 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61  age Record Forma
125c0 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
125d0 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
125e0 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
125f0 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
12600 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
12610 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12620 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20  align=center>0. 
12630 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
12640 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12650 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70 61 67  .    <td>The pag
12660 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  e number in the 
12670 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 3c 74  database file.<t
12680 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12690 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
126a0 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
126b0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
126c0 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67 69 6e  N.    <td>Origin
126d0 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  al content of th
126e0 65 20 70 61 67 65 20 70 72 69 6f 72 20 74 6f 20  e page prior to 
126f0 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
12700 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 3c 74 72   transaction.<tr
12710 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12720 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 2b 34  align=center>N+4
12730 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
12740 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12750 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
12760 73 75 6d 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  sum.</table>.</c
12770 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e 28 54 68  enter>...<p>^(Th
12780 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20 61 6e  e checksum is an
12790 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62 69 74   unsigned 32-bit
127a0 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 75 74 65   integer compute
127b0 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  d as follows:</p
127c0 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69 74  >..<ol>.<li>Init
127d0 69 61 6c 69 7a 65 20 74 68 65 20 63 68 65 63 6b  ialize the check
127e0 73 75 6d 20 74 6f 20 74 68 65 20 63 68 65 63 6b  sum to the check
127f0 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c 75 65 20  sum nonce value 
12800 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 6a 6f 75  found in the.jou
12810 72 6e 61 6c 20 68 65 61 64 65 72 20 61 74 20 6f  rnal header at o
12820 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69 3e 49 6e  ffset 12..<li>In
12830 69 74 69 61 6c 69 7a 65 20 69 6e 64 65 78 20 58  itialize index X
12840 20 74 6f 20 62 65 20 4e 2d 32 30 30 20 28 77 68   to be N-200 (wh
12850 65 72 65 20 4e 20 69 73 20 74 68 65 20 73 69 7a  ere N is the siz
12860 65 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20  e of a database 
12870 70 61 67 65 0a 69 6e 20 62 79 74 65 73 2e 0a 3c  page.in bytes..<
12880 6c 69 3e 49 6e 74 65 72 70 72 65 74 20 74 68 65  li>Interpret the
12890 20 66 6f 75 72 20 62 79 74 65 73 20 61 74 20 6f   four bytes at o
128a0 66 66 73 65 74 20 58 20 69 6e 74 6f 20 74 68 65  ffset X into the
128b0 20 70 61 67 65 20 61 73 20 61 20 34 2d 62 79 74   page as a 4-byt
128c0 65 20 62 69 67 2d 65 6e 64 69 61 6e 0a 75 6e 73  e big-endian.uns
128d0 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20  igned integer.  
128e0 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Add the value of
128f0 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 74 6f   that integer to
12900 20 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c   the checksum..<
12910 6c 69 3e 53 75 62 74 72 61 63 65 20 32 30 30 20  li>Subtrace 200 
12920 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49 66 20 58  from X..<li>If X
12930 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
12940 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72   or equal to zer
12950 6f 2c 20 67 6f 20 62 61 63 6b 20 74 6f 20 73 74  o, go back to st
12960 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c  ep 3..</ol>)^..<
12970 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76  p>The checksum v
12980 61 6c 75 65 20 69 73 20 75 73 65 64 20 74 6f 20  alue is used to 
12990 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 69 6e  guard against in
129a0 63 6f 6d 70 6c 65 74 65 20 77 72 69 74 65 73 20  complete writes 
129b0 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c 20 70 61 67  of.a journal pag
129c0 65 20 72 65 63 6f 72 64 20 66 6f 6c 6c 6f 77 69  e record followi
129d0 6e 67 20 61 20 70 6f 77 65 72 20 66 61 69 6c 75  ng a power failu
129e0 72 65 2e 20 20 41 20 64 69 66 66 65 72 65 6e 74  re.  A different
129f0 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 0a 69 73   random nonce.is
12a00 20 75 73 65 64 20 65 61 63 68 20 74 69 6d 65 20   used each time 
12a10 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
12a20 20 73 74 61 72 74 65 64 20 69 6e 20 6f 72 64 65   started in orde
12a30 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68  r to minimize th
12a40 65 20 72 69 73 6b 0a 74 68 61 74 20 75 6e 77 72  e risk.that unwr
12a50 69 74 74 65 6e 20 73 65 63 74 6f 72 73 20 6d 69  itten sectors mi
12a60 67 68 74 20 62 79 20 63 68 61 6e 63 65 20 63 6f  ght by chance co
12a70 6e 74 61 69 6e 20 64 61 74 61 20 66 72 6f 6d 20  ntain data from 
12a80 74 68 65 20 73 61 6d 65 20 70 61 67 65 0a 74 68  the same page.th
12a90 61 74 20 77 61 73 20 61 20 70 61 72 74 20 6f 66  at was a part of
12aa0 20 70 72 69 6f 72 20 6a 6f 75 72 6e 61 6c 73 2e   prior journals.
12ab0 20 20 42 79 20 63 68 61 6e 67 69 6e 67 20 74 68    By changing th
12ac0 65 20 6e 6f 6e 63 65 20 66 6f 72 20 65 61 63 68  e nonce for each
12ad0 0a 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73 74  .transaction, st
12ae0 61 6c 65 20 64 61 74 61 20 6f 6e 20 64 69 73 6b  ale data on disk
12af0 20 77 69 6c 6c 20 73 74 69 6c 6c 20 67 65 6e 65   will still gene
12b00 72 61 74 65 20 61 6e 20 69 6e 63 6f 72 72 65 63  rate an incorrec
12b10 74 20 63 68 65 63 6b 73 75 6d 0a 61 6e 64 20 62  t checksum.and b
12b20 65 20 64 65 74 65 63 74 65 64 20 77 69 74 68 20  e detected with 
12b30 68 69 67 68 20 70 72 6f 62 61 62 69 6c 69 74 79  high probability
12b40 2e 20 20 54 68 65 20 63 68 65 63 6b 73 75 6d 20  .  The checksum 
12b50 6f 6e 6c 79 20 75 73 65 73 20 61 20 73 70 61 72  only uses a spar
12b60 73 65 20 73 61 6d 70 6c 65 0a 6f 66 20 33 32 2d  se sample.of 32-
12b70 62 69 74 20 77 6f 72 64 73 20 66 72 6f 6d 20 74  bit words from t
12b80 68 65 20 64 61 74 61 20 72 65 63 6f 72 64 20 66  he data record f
12b90 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 72  or performance r
12ba0 65 61 73 6f 6e 73 20 2d 20 64 65 73 69 67 6e 20  easons - design 
12bb0 73 74 75 64 69 65 73 20 0a 64 75 72 69 6e 67 20  studies .during 
12bc0 74 68 65 20 70 6c 61 6e 6e 69 6e 67 20 70 68 61  the planning pha
12bd0 73 65 73 20 6f 66 20 53 51 4c 69 74 65 20 33 2e  ses of SQLite 3.
12be0 30 2e 30 20 73 68 6f 77 65 64 0a 61 20 73 69 67  0.0 showed.a sig
12bf0 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
12c00 61 6e 63 65 20 68 69 74 20 69 6e 20 63 68 65 63  ance hit in chec
12c10 6b 73 75 6d 6d 69 6e 67 20 74 68 65 20 65 6e 74  ksumming the ent
12c20 69 72 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c  ire page.</p>..<
12c30 70 3e 4c 65 74 20 74 68 65 20 70 61 67 65 20 63  p>Let the page c
12c40 6f 75 6e 74 20 76 61 6c 75 65 20 61 74 20 6f 66  ount value at of
12c50 66 73 65 74 20 38 20 69 6e 20 74 68 65 20 6a 6f  fset 8 in the jo
12c60 75 72 6e 61 6c 20 68 65 61 64 65 72 20 62 65 20  urnal header be 
12c70 4d 2e 0a 5e 49 66 20 4d 20 69 73 20 67 72 65 61  M..^If M is grea
12c80 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 74 68  ter than zero th
12c90 65 6e 20 61 66 74 65 72 20 4d 20 70 61 67 65 20  en after M page 
12ca0 72 65 63 6f 72 64 73 20 74 68 65 20 6a 6f 75 72  records the jour
12cb0 6e 61 6c 20 66 69 6c 65 0a 6d 61 79 20 62 65 20  nal file.may be 
12cc0 7a 65 72 6f 20 70 61 64 64 65 64 20 6f 75 74 20  zero padded out 
12cd0 74 6f 20 74 68 65 20 6e 65 78 74 20 6d 75 6c 74  to the next mult
12ce0 69 70 6c 65 20 6f 66 20 74 68 65 20 73 65 63 74  iple of the sect
12cf0 6f 72 20 73 69 7a 65 20 61 6e 64 20 61 6e 6f 74  or size and anot
12d00 68 65 72 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64  her.journal head
12d10 65 72 20 6d 61 79 20 62 65 20 69 6e 73 65 72 74  er may be insert
12d20 65 64 2e 20 20 5e 41 6c 6c 20 6a 6f 75 72 6e 61  ed.  ^All journa
12d30 6c 20 68 65 61 64 65 72 73 20 77 69 74 68 69 6e  l headers within
12d40 20 74 68 65 20 73 61 6d 65 0a 6a 6f 75 72 6e 61   the same.journa
12d50 6c 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 74  l must contain t
12d60 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
12d70 20 70 61 67 65 20 73 69 7a 65 20 61 6e 64 20 73   page size and s
12d80 65 63 74 6f 72 20 73 69 7a 65 2e 3c 2f 70 3e 0a  ector size.</p>.
12d90 0a 3c 70 3e 5e 49 66 20 4d 20 69 73 20 2d 31 20  .<p>^If M is -1 
12da0 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 20 6a  in the initial j
12db0 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 2c 20 74  ournal header, t
12dc0 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  hen the number o
12dd0 66 20 70 61 67 65 20 72 65 63 6f 72 64 73 0a 74  f page records.t
12de0 68 61 74 20 66 6f 6c 6c 6f 77 20 69 73 20 63 6f  hat follow is co
12df0 6d 70 75 74 65 64 20 62 79 20 63 6f 6d 70 75 74  mputed by comput
12e00 69 6e 67 20 68 6f 77 20 6d 61 6e 79 20 70 61 67  ing how many pag
12e10 65 20 72 65 63 6f 72 64 73 20 77 69 6c 6c 20 66  e records will f
12e20 69 74 20 69 6e 0a 74 68 65 20 61 76 61 69 6c 61  it in.the availa
12e30 62 6c 65 20 73 70 61 63 65 20 6f 66 20 74 68 65  ble space of the
12e40 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68   remainder of th
12e50 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 3c  e journal file.<
12e60 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
12e70 67 6d 65 6e 74 20 77 61 6c 66 6f 72 6d 61 74 20  gment walformat 
12e80 7b 57 41 4c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63  {WAL format}</tc
12e90 6c 3e 0a 3c 68 32 3e 34 2e 30 20 54 68 65 20 57  l>.<h2>4.0 The W
12ea0 72 69 74 65 2d 41 68 65 61 64 20 4c 6f 67 3c 2f  rite-Ahead Log</
12eb0 68 32 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e  h2>..<p>Beginnin
12ec0 67 20 77 69 74 68 20 5b 76 65 72 73 69 6f 6e 20  g with [version 
12ed0 33 2e 37 2e 30 5d 2c 20 53 51 4c 69 74 65 20 73  3.7.0], SQLite s
12ee0 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20 74 72  upports a new tr
12ef0 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74 72 6f  ansaction.contro
12f00 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61 6c 6c  l mechanism call
12f10 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69 74 65  ed "[WAL | write
12f20 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f 72 20  -ahead log]" or 
12f30 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e 20 61  "[WAL]"..^When a
12f40 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e 20   database is in 
12f50 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20 63 6f  WAL mode, all co
12f60 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74 68 61  nnections to tha
12f70 74 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 0a  t database must.
12f80 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20 5e 41  use the WAL.  ^A
12f90 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
12fa0 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20 65 69  base will use ei
12fb0 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63 6b 20  ther a rollback 
12fc0 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57 41 4c  journal.or a WAL
12fd0 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 20 61  , but not both a
12fe0 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
12ff0 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61 6c 77  .^The WAL is alw
13000 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20 74  ays located in t
13010 68 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f 72  he same director
13020 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  y as the databas
13030 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20 74  e.file and has t
13040 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20  he same name as 
13050 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
13060 65 20 62 75 74 20 77 69 74 68 20 74 68 65 20 73  e but with the s
13070 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61 6c 3c  tring."<tt>-wal<
13080 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e 3c  /tt>" appended.<
13090 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 31 20 57 41 4c  /p>..<h3>4.1 WAL
130a0 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 68 34   File Format</h4
130b0 3e 0a 0a 3c 70 3e 41 20 57 41 4c 20 66 69 6c 65  >..<p>A WAL file
130c0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 68   consists of a h
130d0 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62  eader followed b
130e0 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 22  y zero or more "
130f0 66 72 61 6d 65 73 22 2e 0a 45 61 63 68 20 66 72  frames"..Each fr
13100 61 6d 65 20 72 65 63 6f 72 64 73 20 74 68 65 20  ame records the 
13110 72 65 76 69 73 65 64 20 63 6f 6e 74 65 6e 74 20  revised content 
13120 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65  of a single page
13130 20 66 72 6f 6d 20 74 68 65 0a 64 61 74 61 62 61   from the.databa
13140 73 65 20 66 69 6c 65 2e 20 20 41 6c 6c 20 63 68  se file.  All ch
13150 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74  anges to the dat
13160 61 62 61 73 65 20 61 72 65 20 72 65 63 6f 72 64  abase are record
13170 65 64 20 62 79 20 77 72 69 74 69 6e 67 0a 66 72  ed by writing.fr
13180 61 6d 65 73 20 69 6e 74 6f 20 74 68 65 20 57 41  ames into the WA
13190 4c 2e 20 20 54 72 61 6e 73 61 63 74 69 6f 6e 73  L.  Transactions
131a0 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 61 20 66   commit when a f
131b0 72 61 6d 65 20 69 73 20 77 72 69 74 74 65 6e 20  rame is written 
131c0 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 61 20  that.contains a 
131d0 63 6f 6d 6d 69 74 20 6d 61 72 6b 65 72 2e 20 20  commit marker.  
131e0 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 63 61  ^A single WAL ca
131f0 6e 20 61 6e 64 20 75 73 75 61 6c 6c 79 20 64 6f  n and usually do
13200 65 73 20 72 65 63 6f 72 64 20 0a 6d 75 6c 74 69  es record .multi
13210 70 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ple transactions
13220 2e 20 20 50 65 72 69 6f 64 69 63 61 6c 6c 79 2c  .  Periodically,
13230 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
13240 74 68 65 20 57 41 4c 20 69 73 0a 74 72 61 6e 73  the WAL is.trans
13250 66 65 72 72 65 64 20 62 61 63 6b 20 69 6e 74 6f  ferred back into
13260 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
13270 6c 65 20 69 6e 20 61 6e 20 6f 70 65 72 61 74 69  le in an operati
13280 6f 6e 20 63 61 6c 6c 65 64 20 61 0a 22 63 68 65  on called a."che
13290 63 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c  ckpoint".</p>..<
132a0 70 3e 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20  p>^A single WAL 
132b0 66 69 6c 65 20 63 61 6e 20 62 65 20 72 65 75 73  file can be reus
132c0 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65  ed multiple time
132d0 73 2e 20 20 5e 49 6e 20 6f 74 68 65 72 20 77 6f  s.  ^In other wo
132e0 72 64 73 2c 20 74 68 65 0a 57 41 4c 20 63 61 6e  rds, the.WAL can
132f0 20 66 69 6c 6c 20 75 70 20 77 69 74 68 20 66 72   fill up with fr
13300 61 6d 65 73 20 61 6e 64 20 74 68 65 6e 20 62 65  ames and then be
13310 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 6e   checkpointed an
13320 64 20 74 68 65 6e 20 6e 65 77 0a 66 72 61 6d 65  d then new.frame
13330 73 20 63 61 6e 20 6f 76 65 72 77 72 69 74 65 20  s can overwrite 
13340 74 68 65 20 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e  the old ones.  ^
13350 41 20 57 41 4c 20 61 6c 77 61 79 73 20 67 72 6f  A WAL always gro
13360 77 73 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ws from beginnin
13370 67 0a 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g.toward the end
13380 2e 20 20 43 68 65 63 6b 73 75 6d 73 20 61 6e 64  .  Checksums and
13390 20 63 6f 75 6e 74 65 72 73 20 61 74 74 61 63 68   counters attach
133a0 65 64 20 74 6f 20 65 61 63 68 20 66 72 61 6d 65  ed to each frame
133b0 20 61 72 65 0a 75 73 65 64 20 74 6f 20 64 65 74   are.used to det
133c0 65 72 6d 69 6e 65 20 77 68 69 63 68 20 66 72 61  ermine which fra
133d0 6d 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 57  mes within the W
133e0 41 4c 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64  AL are valid and
133f0 20 77 68 69 63 68 0a 61 72 65 20 6c 65 66 74 6f   which.are lefto
13400 76 65 72 73 20 66 72 6f 6d 20 70 72 69 6f 72 20  vers from prior 
13410 63 68 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e  checkpoints.</p>
13420 0a 0a 3c 70 3e 5e 28 54 68 65 20 57 41 4c 20 68  ..<p>^(The WAL h
13430 65 61 64 65 72 20 69 73 20 33 32 20 62 79 74 65  eader is 32 byte
13440 73 20 69 6e 20 73 69 7a 65 20 61 6e 64 20 63 6f  s in size and co
13450 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 66 6f  nsists of the fo
13460 6c 6c 6f 77 69 6e 67 20 65 69 67 68 74 0a 62 69  llowing eight.bi
13470 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20  g-endian 32-bit 
13480 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
13490 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63   values:</p>..<c
134a0 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 48 65  enter>.<i>WAL He
134b0 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
134c0 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
134d0 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
134e0 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
134f0 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
13500 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
13510 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13520 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
13530 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13540 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 4d 61  ter>4.    <td>Ma
13550 67 69 63 20 6e 75 6d 62 65 72 2e 20 20 30 78 33  gic number.  0x3
13560 37 37 66 30 36 38 32 20 6f 72 20 30 78 33 37 37  77f0682 or 0x377
13570 66 30 36 38 33 0a 3c 74 72 3e 3c 74 64 20 76 61  f0683.<tr><td va
13580 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13590 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67  enter>4<td valig
135a0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
135b0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 69 6c  er>4.    <td>Fil
135c0 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e  e format version
135d0 2e 20 20 43 75 72 72 65 6e 74 6c 79 20 33 30 30  .  Currently 300
135e0 37 30 30 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  7000..<tr><td va
135f0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13600 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67  enter>8<td valig
13610 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13620 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 44 61 74  er>4.    <td>Dat
13630 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 2e  abase page size.
13640 20 20 45 78 61 6d 70 6c 65 3a 20 31 30 32 34 0a    Example: 1024.
13650 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13660 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13670 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  12<td valign=top
13680 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13690 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 70 6f 69      <td>Checkpoi
136a0 6e 74 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  nt sequence numb
136b0 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
136c0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
136d0 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
136e0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
136f0 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d  >4.    <td>Salt-
13700 31 3a 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65  1: random intege
13710 72 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 69  r incremented wi
13720 74 68 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69  th each checkpoi
13730 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  nt.<tr><td valig
13740 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13750 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d  er>20<td valign=
13760 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13770 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d  >4.    <td>Salt-
13780 32 3a 20 61 20 64 69 66 66 65 72 65 6e 74 20 72  2: a different r
13790 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 66 6f 72  andom number for
137a0 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74   each checkpoint
137b0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
137c0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
137d0 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >24<td valign=to
137e0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
137f0 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75  .    <td>Checksu
13800 6d 2d 31 3a 20 46 69 72 73 74 20 70 61 72 74 20  m-1: First part 
13810 6f 66 20 61 20 63 68 65 63 6b 73 75 6d 20 6f 6e  of a checksum on
13820 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62 79   the first 24 by
13830 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 74  tes of header.<t
13840 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13850 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 38   align=center>28
13860 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13870 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13880 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32    <td>Checksum-2
13890 3a 20 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66  : Second part of
138a0 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e   the checksum on
138b0 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62 79   the first 24 by
138c0 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 2f  tes of header.</
138d0 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
138e0 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61 74  )^..<p>^Immediat
138f0 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ely following th
13900 65 20 77 61 6c 2d 68 65 61 64 65 72 20 61 72 65  e wal-header are
13910 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72   zero or more fr
13920 61 6d 65 73 2e 20 5e 45 61 63 68 0a 66 72 61 6d  ames. ^Each.fram
13930 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
13940 32 34 2d 62 79 74 65 20 66 72 61 6d 65 2d 68 65  24-byte frame-he
13950 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ader followed by
13960 20 61 20 3c 69 3e 70 61 67 65 2d 73 69 7a 65 3c   a <i>page-size<
13970 2f 69 3e 20 62 79 74 65 73 0a 6f 66 20 70 61 67  /i> bytes.of pag
13980 65 20 64 61 74 61 2e 20 5e 28 54 68 65 20 66 72  e data. ^(The fr
13990 61 6d 65 2d 68 65 61 64 65 72 20 69 73 20 73 69  ame-header is si
139a0 78 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d  x big-endian 32-
139b0 62 69 74 20 75 6e 73 69 67 6e 65 64 20 0a 69 6e  bit unsigned .in
139c0 74 65 67 65 72 20 76 61 6c 75 65 73 2c 20 61 73  teger values, as
139d0 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74   follows:..<cent
139e0 65 72 3e 0a 3c 69 3e 57 41 4c 20 46 72 61 6d 65  er>.<i>WAL Frame
139f0 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f   Header Format</
13a00 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69  i><br>.<table wi
13a10 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72  dth="80%" border
13a20 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  =1>.<tr><th>Offs
13a30 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
13a40 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
13a50 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13a60 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
13a70 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13a80 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13a90 3e 50 61 67 65 20 6e 75 6d 62 65 72 0a 3c 74 72  >Page number.<tr
13aa0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13ab0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
13ac0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13ad0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
13ae0 3c 74 64 3e 46 6f 72 20 63 6f 6d 6d 69 74 20 72  <td>For commit r
13af0 65 63 6f 72 64 73 2c 20 74 68 65 20 73 69 7a 65  ecords, the size
13b00 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
13b10 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73 0a 20   file in pages. 
13b20 20 20 20 20 20 20 20 61 66 74 65 72 20 74 68 65         after the
13b30 20 63 6f 6d 6d 69 74 2e 20 20 46 6f 72 20 61 6c   commit.  For al
13b40 6c 20 6f 74 68 65 72 20 72 65 63 6f 72 64 73 2c  l other records,
13b50 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76   zero..<tr><td v
13b60 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13b70 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69  center>8<td vali
13b80 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13b90 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61  ter>4.    <td>Sa
13ba0 6c 74 2d 31 20 63 6f 70 69 65 64 20 66 72 6f 6d  lt-1 copied from
13bb0 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a   the WAL header.
13bc0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13bd0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13be0 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  12<td valign=top
13bf0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
13c00 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 20 63      <td>Salt-2 c
13c10 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57  opied from the W
13c20 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74  AL header.<tr><t
13c30 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c40 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20  gn=center>16<td 
13c50 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13c60 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
13c70 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 20 43  d>Checksum-1:  C
13c80 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73  umulative checks
13c90 75 6d 20 75 70 20 74 68 72 6f 75 67 68 20 61 6e  um up through an
13ca0 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 69 73  d including this
13cb0 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20 76 61   page.<tr><td va
13cc0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13cd0 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69  enter>20<td vali
13ce0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13cf0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
13d00 65 63 6b 73 75 6d 2d 32 3a 20 20 53 65 63 6f 6e  ecksum-2:  Secon
13d10 64 20 68 61 6c 66 20 6f 66 20 74 68 65 20 63 75  d half of the cu
13d20 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75  mulative checksu
13d30 6d 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  m..</table>.</ce
13d40 6e 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20  nter>)^..^(<p>A 
13d50 66 72 61 6d 65 20 69 73 20 63 6f 6e 73 69 64 65  frame is conside
13d60 72 65 64 20 76 61 6c 69 64 20 69 66 20 61 6e 64  red valid if and
13d70 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 6f 6c   only if the fol
13d80 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e  lowing condition
13d90 73 20 61 72 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a  s are.true:</p>.
13da0 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65  .<ol>.<li><p>The
13db0 20 73 61 6c 74 2d 31 20 61 6e 64 20 73 61 6c 74   salt-1 and salt
13dc0 2d 32 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  -2 values in the
13dd0 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 6d 61   frame-header ma
13de0 74 63 68 0a 20 20 20 20 20 20 20 73 61 6c 74 20  tch.       salt 
13df0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 77 61  values in the wa
13e00 6c 2d 68 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69  l-header</p></li
13e10 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 63 68  >..<li><p>The ch
13e20 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 69 6e  ecksum values in
13e30 20 74 68 65 20 66 69 6e 61 6c 20 38 20 62 79 74   the final 8 byt
13e40 65 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 2d  es of the frame-
13e50 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 65 78  header.       ex
13e60 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20  actly match the 
13e70 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70 75 74 65  checksum compute
13e80 64 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 20  d consecutively 
13e90 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 66 69  on the.       fi
13ea0 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20  rst 24 bytes of 
13eb0 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 61  the WAL header a
13ec0 6e 64 20 74 68 65 20 66 69 72 73 74 20 38 20 62  nd the first 8 b
13ed0 79 74 65 73 20 61 6e 64 0a 20 20 20 20 20 20 20  ytes and.       
13ee0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
13ef0 6c 6c 20 66 72 61 6d 65 73 0a 20 20 20 20 20 20  ll frames.      
13f00 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75   up to and inclu
13f10 64 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74  ding the current
13f20 20 66 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e   frame.</p></li>
13f30 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c  </li>.</ol>)^..<
13f40 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
13f50 77 61 6c 63 6b 73 6d 20 7b 57 41 4c 20 63 68 65  walcksm {WAL che
13f60 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 7d  cksum algorithm}
13f70 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 32 20 43  </tcl>.<h3>4.2 C
13f80 68 65 63 6b 73 75 6d 20 41 6c 67 6f 72 69 74 68  hecksum Algorith
13f90 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63  m</h3>..<p>The c
13fa0 68 65 63 6b 73 75 6d 20 69 73 20 63 6f 6d 70 75  hecksum is compu
13fb0 74 65 64 20 62 79 20 69 6e 74 65 72 70 72 65 74  ted by interpret
13fc0 69 6e 67 20 74 68 65 20 69 6e 70 75 74 20 61 73  ing the input as
13fd0 0a 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20  .an even number 
13fe0 6f 66 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62  of unsigned 32-b
13ff0 69 74 20 69 6e 74 65 67 65 72 73 3a 20 78 28 30  it integers: x(0
14000 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29 2e 0a  ) through x(N)..
14010 5e 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65  ^The 32-bit inte
14020 67 65 72 73 20 61 72 65 20 62 69 67 2d 65 6e 64  gers are big-end
14030 69 61 6e 20 69 66 20 74 68 65 0a 6d 61 67 69 63  ian if the.magic
14040 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 66   number in the f
14050 69 72 73 74 20 34 20 62 79 74 65 73 20 6f 66 20  irst 4 bytes of 
14060 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 69  the WAL header i
14070 73 20 30 78 33 37 37 66 30 36 38 33 20 61 6e 64  s 0x377f0683 and
14080 0a 74 68 65 20 69 6e 74 65 67 65 72 73 20 61 72  .the integers ar
14090 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20  e little-endian 
140a0 69 66 20 74 68 65 20 6d 61 67 69 63 20 6e 75 6d  if the magic num
140b0 62 65 72 20 69 73 20 30 78 33 37 37 66 30 36 38  ber is 0x377f068
140c0 32 2e 0a 5e 54 68 65 20 63 68 65 63 6b 73 75 6d  2..^The checksum
140d0 20 76 61 6c 75 65 73 20 61 72 65 20 61 6c 77 61   values are alwa
140e0 79 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ys stored in the
140f0 20 66 72 61 6d 65 20 68 65 61 64 65 72 20 69 6e   frame header in
14100 20 61 0a 62 69 67 2d 65 6e 64 69 61 6e 20 66 6f   a.big-endian fo
14110 72 6d 61 74 20 72 65 67 61 72 64 6c 65 73 73 20  rmat regardless 
14120 6f 66 20 77 68 69 63 68 20 62 79 74 65 20 6f 72  of which byte or
14130 64 65 72 20 69 73 20 75 73 65 64 20 74 6f 20 63  der is used to c
14140 6f 6d 70 75 74 65 0a 74 68 65 20 63 68 65 63 6b  ompute.the check
14150 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  sum.</p>..<p>The
14160 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69   checksum algori
14170 74 68 6d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  thm only works f
14180 6f 72 20 63 6f 6e 74 65 6e 74 20 77 68 69 63 68  or content which
14190 20 69 73 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f   is a multiple o
141a0 66 0a 38 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  f.8 bytes in len
141b0 67 74 68 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  gth.  In other w
141c0 6f 72 64 73 2c 20 69 66 20 74 68 65 20 69 6e 70  ords, if the inp
141d0 75 74 73 20 61 72 65 20 78 28 30 29 20 74 68 72  uts are x(0) thr
141e0 6f 75 67 68 20 78 28 4e 29 0a 74 68 65 6e 20 4e  ough x(N).then N
141f0 20 6d 75 73 74 20 62 65 20 6f 64 64 2e 0a 5e 28   must be odd..^(
14200 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61 6c 67  The checksum alg
14210 6f 72 69 74 68 6d 20 69 73 20 61 73 20 66 6f 6c  orithm is as fol
14220 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  lows:..<blockquo
14230 74 65 3e 3c 70 72 65 3e 20 0a 73 30 20 3d 20 73  te><pre> .s0 = s
14240 31 20 3d 20 30 0a 66 6f 72 20 69 20 66 72 6f 6d  1 = 0.for i from
14250 20 30 20 74 6f 20 6e 2d 31 20 73 74 65 70 20 32   0 to n-1 step 2
14260 3a 0a 20 20 20 73 30 20 2b 3d 20 78 28 69 29 20  :.   s0 += x(i) 
14270 2b 20 73 31 3b 0a 20 20 20 73 31 20 2b 3d 20 78  + s1;.   s1 += x
14280 28 69 2b 31 29 20 2b 20 73 30 3b 0a 65 6e 64 66  (i+1) + s0;.endf
14290 6f 72 0a 23 20 72 65 73 75 6c 74 20 69 6e 20 73  or.# result in s
142a0 30 20 61 6e 64 20 73 31 0a 3c 2f 70 72 65 3e 3c  0 and s1.</pre><
142b0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
142c0 3c 70 3e 5e 54 68 65 20 6f 75 74 70 75 74 73 20  <p>^The outputs 
142d0 73 30 20 61 6e 64 20 73 31 20 61 72 65 20 62 6f  s0 and s1 are bo
142e0 74 68 20 77 65 69 67 68 74 65 64 20 63 68 65 63  th weighted chec
142f0 6b 73 75 6d 73 20 75 73 69 6e 67 20 46 69 62 6f  ksums using Fibo
14300 6e 61 63 63 69 20 77 65 69 67 68 74 73 0a 69 6e  nacci weights.in
14310 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2e 20   reverse order. 
14320 20 28 5e 54 68 65 20 6c 61 72 67 65 73 74 20 46   (^The largest F
14330 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68 74 20  ibonacci weight 
14340 6f 63 63 75 72 73 20 6f 6e 20 74 68 65 20 66 69  occurs on the fi
14350 72 73 74 20 65 6c 65 6d 65 6e 74 0a 6f 66 20 74  rst element.of t
14360 68 65 20 73 65 71 75 65 6e 63 65 20 62 65 69 6e  he sequence bein
14370 67 20 73 75 6d 6d 65 64 2e 29 20 20 5e 54 68 65  g summed.)  ^The
14380 20 73 31 20 76 61 6c 75 65 20 73 70 61 6e 73 20   s1 value spans 
14390 61 6c 6c 20 33 32 2d 62 69 74 20 69 6e 74 65 67  all 32-bit integ
143a0 65 72 0a 74 65 72 6d 73 20 6f 66 20 74 68 65 20  er.terms of the 
143b0 73 65 71 75 65 6e 63 65 20 77 68 65 72 65 61 73  sequence whereas
143c0 20 73 30 20 6f 6d 69 74 73 20 74 68 65 20 66 69   s0 omits the fi
143d0 6e 61 6c 20 74 65 72 6d 2e 3c 2f 70 3e 0a 0a 3c  nal term.</p>..<
143e0 68 33 3e 34 2e 33 20 43 68 65 63 6b 70 6f 69 6e  h3>4.3 Checkpoin
143f0 74 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e  t Algorithm</h3>
14400 0a 0a 3c 70 3e 5e 4f 6e 20 61 20 5b 63 68 65 63  ..<p>^On a [chec
14410 6b 70 6f 69 6e 74 5d 2c 20 74 68 65 20 57 41 4c  kpoint], the WAL
14420 20 69 73 20 66 69 72 73 74 20 66 6c 75 73 68 65   is first flushe
14430 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20  d to persistent 
14440 73 74 6f 72 61 67 65 20 75 73 69 6e 67 0a 74 68  storage using.th
14450 65 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 6f  e xSync method o
14460 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f 69  f the [sqlite3_i
14470 6f 5f 6d 65 74 68 6f 64 73 20 7c 20 56 46 53 5d  o_methods | VFS]
14480 2e 20 0a 5e 54 68 65 6e 20 76 61 6c 69 64 20 63  . .^Then valid c
14490 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 57 41  ontent of the WA
144a0 4c 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  L is transferred
144b0 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
144c0 73 65 20 66 69 6c 65 2e 0a 5e 46 69 6e 61 6c 6c  se file..^Finall
144d0 79 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  y, the database 
144e0 69 73 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65  is flushed to pe
144f0 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65  rsistent storage
14500 20 75 73 69 6e 67 20 61 6e 6f 74 68 65 72 0a 78   using another.x
14510 53 79 6e 63 20 6d 65 74 68 6f 64 20 63 61 6c 6c  Sync method call
14520 2e 0a 54 68 65 20 78 53 79 6e 63 20 6f 70 65 72  ..The xSync oper
14530 61 74 69 6f 6e 73 20 73 65 72 76 65 20 61 73 20  ations serve as 
14540 77 72 69 74 65 20 62 61 72 72 69 65 72 73 20 2d  write barriers -
14550 20 61 6c 6c 20 77 72 69 74 65 73 20 6c 61 75 6e   all writes laun
14560 63 68 65 64 0a 62 65 66 6f 72 65 20 74 68 65 20  ched.before the 
14570 78 53 79 6e 63 20 6d 75 73 74 20 63 6f 6d 70 6c  xSync must compl
14580 65 74 65 20 62 65 66 6f 72 65 20 61 6e 79 20 77  ete before any w
14590 72 69 74 65 20 74 68 61 74 20 6c 61 75 6e 63 68  rite that launch
145a0 65 73 20 61 66 74 65 72 20 74 68 65 0a 78 53 79  es after the.xSy
145b0 6e 63 20 62 65 67 69 6e 73 2e 3c 2f 70 3e 0a 0a  nc begins.</p>..
145c0 3c 70 3e 5e 41 66 74 65 72 20 65 61 63 68 20 63  <p>^After each c
145d0 68 65 63 6b 70 6f 69 6e 74 2c 20 74 68 65 20 57  heckpoint, the W
145e0 41 4c 20 68 65 61 64 65 72 20 73 61 6c 74 2d 31  AL header salt-1
145f0 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65 6d   value is increm
14600 65 6e 74 65 64 20 61 6e 64 20 74 68 65 20 0a 73  ented and the .s
14610 61 6c 74 2d 32 20 76 61 6c 75 65 20 69 73 20 72  alt-2 value is r
14620 61 6e 64 6f 6d 69 7a 65 64 2e 20 20 54 68 69 73  andomized.  This
14630 20 70 72 65 76 65 6e 74 73 20 6f 6c 64 20 61 6e   prevents old an
14640 64 20 6e 65 77 20 66 72 61 6d 65 73 20 69 6e 20  d new frames in 
14650 74 68 65 20 57 41 4c 20 66 72 6f 6d 0a 62 65 69  the WAL from.bei
14660 6e 67 20 63 6f 6e 73 69 64 65 72 65 64 20 76 61  ng considered va
14670 6c 69 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  lid at the same 
14680 74 69 6d 65 20 61 6e 64 20 62 65 69 6e 67 20 63  time and being c
14690 68 65 63 6b 70 6f 69 6e 74 69 6e 67 20 74 6f 67  heckpointing tog
146a0 65 74 68 65 72 0a 66 6f 6c 6c 6f 77 69 6e 67 20  ether.following 
146b0 61 20 63 72 61 73 68 2e 3c 2f 70 3e 0a 0a 3c 74  a crash.</p>..<t
146c0 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77  cl>hd_fragment w
146d0 61 6c 72 65 61 64 20 7b 57 41 4c 20 72 65 61 64  alread {WAL read
146e0 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c   algorithm}</tcl
146f0 3e 0a 3c 68 33 3e 34 2e 34 20 52 65 61 64 65 72  >.<h3>4.4 Reader
14700 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a   Algorithm</h3>.
14710 0a 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20 61 20  .<p>^(To read a 
14720 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61  page from the da
14730 74 61 62 61 73 65 20 28 63 61 6c 6c 20 69 74 20  tabase (call it 
14740 70 61 67 65 20 6e 75 6d 62 65 72 20 50 29 2c 20  page number P), 
14750 61 20 72 65 61 64 65 72 0a 66 69 72 73 74 20 63  a reader.first c
14760 68 65 63 6b 73 20 74 68 65 20 57 41 4c 20 74 6f  hecks the WAL to
14770 20 73 65 65 20 69 66 20 69 74 20 63 6f 6e 74 61   see if it conta
14780 69 6e 73 20 70 61 67 65 20 50 2e 20 20 49 66 20  ins page P.  If 
14790 73 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61 73  so, then the.las
147a0 74 20 76 61 6c 69 64 20 69 6e 73 74 61 6e 63 65  t valid instance
147b0 20 6f 66 20 70 61 67 65 20 50 20 74 68 61 74 20   of page P that 
147c0 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
147d0 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f 72   commit frame.or
147e0 20 69 73 20 61 20 63 6f 6d 6d 69 74 20 66 72 61   is a commit fra
147f0 6d 65 20 69 74 73 65 6c 66 20 62 65 63 6f 6d 65  me itself become
14800 73 20 74 68 65 20 76 61 6c 75 65 20 72 65 61 64  s the value read
14810 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 57 41 4c  .)^  ^If the WAL
14820 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f 70  .contains no cop
14830 69 65 73 20 6f 66 20 70 61 67 65 20 50 20 74 68  ies of page P th
14840 61 74 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64  at are valid and
14850 20 77 68 69 63 68 20 61 72 65 20 61 20 63 6f 6d   which are a com
14860 6d 69 74 0a 66 72 61 6d 65 20 6f 72 20 61 72 65  mit.frame or are
14870 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
14880 6f 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74 68 65  ommit frame, the
14890 6e 20 70 61 67 65 20 50 20 69 73 20 72 65 61 64  n page P is read
148a0 20 66 72 6f 6d 0a 74 68 65 20 64 61 74 61 62 61   from.the databa
148b0 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
148c0 3e 54 6f 20 73 74 61 72 74 20 61 20 72 65 61 64  >To start a read
148d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
148e0 65 20 72 65 61 64 65 72 20 72 65 63 6f 72 64 73  e reader records
148f0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
14900 65 20 6c 61 73 74 0a 76 61 6c 69 64 20 66 72 61  e last.valid fra
14910 6d 65 20 69 6e 20 74 68 65 20 57 41 4c 2e 20 20  me in the WAL.  
14920 54 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20  The reader uses 
14930 74 68 69 73 20 72 65 63 6f 72 64 65 64 20 22 6d  this recorded "m
14940 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 66 6f  xFrame" value.fo
14950 72 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  r all subsequent
14960 20 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73   read operations
14970 2e 20 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69  .  New transacti
14980 6f 6e 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e  ons can be appen
14990 64 65 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20  ded.to the WAL, 
149a0 62 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74  but as long as t
149b0 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20 69  he reader uses i
149c0 74 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72  ts original mxFr
149d0 61 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67  ame value.and ig
149e0 6e 6f 72 65 73 20 73 75 62 73 65 71 75 65 6e 74  nores subsequent
149f0 6c 79 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74  ly appended cont
14a00 65 6e 74 2c 20 74 68 65 20 72 65 61 64 65 72 20  ent, the reader 
14a10 77 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73  will see a .cons
14a20 69 73 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20  istent snapshot 
14a30 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
14a40 66 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f  from a single po
14a50 69 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e  int in time.  .^
14a60 54 68 69 73 20 74 65 63 68 6e 69 71 75 65 20 61  This technique a
14a70 6c 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63  llows multiple c
14a80 6f 6e 63 75 72 72 65 6e 74 20 72 65 61 64 65 72  oncurrent reader
14a90 73 20 74 6f 20 76 69 65 77 20 64 69 66 66 65 72  s to view differ
14aa0 65 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66  ent .versions of
14ab0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
14ac0 6e 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f  ntent simultaneo
14ad0 75 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  usly.</p>..<p>Th
14ae0 65 20 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74  e reader algorit
14af0 68 6d 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  hm in the previo
14b00 75 73 20 70 61 72 61 67 72 61 70 68 73 20 77 6f  us paragraphs wo
14b10 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62  rks correctly, b
14b20 75 74 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d  ut .because fram
14b30 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 63 61  es for page P ca
14b40 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72  n appear anywher
14b50 65 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c  e within the WAL
14b60 2c 20 74 68 65 0a 72 65 61 64 65 72 20 68 61 73  , the.reader has
14b70 20 74 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74   to scan the ent
14b80 69 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20  ire WAL looking 
14b90 66 6f 72 20 70 61 67 65 20 50 20 66 72 61 6d 65  for page P frame
14ba0 73 2e 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69  s.  If the.WAL i
14bb0 73 20 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c  s large (multipl
14bc0 65 20 6d 65 67 61 62 79 74 65 73 20 69 73 20 74  e megabytes is t
14bd0 79 70 69 63 61 6c 29 20 74 68 61 74 20 73 63 61  ypical) that sca
14be0 6e 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61  n can be slow,.a
14bf0 6e 64 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61  nd read performa
14c00 6e 63 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54  nce suffers.  ^T
14c10 6f 20 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20  o overcome this 
14c20 70 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72  problem, a separ
14c30 61 74 65 0a 64 61 74 61 20 73 74 72 75 63 74 75  ate.data structu
14c40 72 65 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61  re called the wa
14c50 6c 2d 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74  l-index is maint
14c60 61 69 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74  ained to expedit
14c70 65 20 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72  e the.search for
14c80 20 66 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72   frames of a par
14c90 74 69 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70  ticular page.</p
14ca0 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
14cb0 65 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d  ent walindexform
14cc0 61 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20 7b  at {wal-index} {
14cd0 57 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61 74  WAL-index format
14ce0 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 35 20  }</tcl>.<h3>4.5 
14cf0 57 41 4c 2d 49 6e 64 65 78 20 46 6f 72 6d 61 74  WAL-Index Format
14d00 3c 2f 68 33 3e 0a 0a 3c 70 3e 43 6f 6e 63 65 70  </h3>..<p>Concep
14d10 74 75 61 6c 6c 79 2c 20 74 68 65 20 77 61 6c 2d  tually, the wal-
14d20 69 6e 64 65 78 20 69 73 20 73 68 61 72 65 64 20  index is shared 
14d30 6d 65 6d 6f 72 79 2c 20 74 68 6f 75 67 68 20 74  memory, though t
14d40 68 65 20 63 75 72 72 65 6e 74 0a 56 46 53 20 69  he current.VFS i
14d50 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75  mplementations u
14d60 73 65 20 61 20 6d 6d 61 70 70 65 64 20 66 69 6c  se a mmapped fil
14d70 65 20 66 6f 72 20 74 68 65 20 77 61 6c 2d 69 6e  e for the wal-in
14d80 64 65 78 2e 20 20 5e 54 68 65 20 6d 6d 61 70 70  dex.  ^The mmapp
14d90 65 64 0a 66 69 6c 65 20 69 73 20 69 6e 20 74 68  ed.file is in th
14da0 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f 72 79  e same directory
14db0 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
14dc0 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d   and has the sam
14dd0 65 20 6e 61 6d 65 0a 61 73 20 74 68 65 20 64 61  e name.as the da
14de0 74 61 62 61 73 65 20 77 69 74 68 20 61 20 22 3c  tabase with a "<
14df0 74 74 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20 73 75  tt>-shm</tt>" su
14e00 66 66 69 78 20 61 70 70 65 6e 64 65 64 2e 20 20  ffix appended.  
14e10 42 65 63 61 75 73 65 0a 74 68 65 20 77 61 6c 2d  Because.the wal-
14e20 69 6e 64 65 78 20 69 73 20 73 68 61 72 65 64 20  index is shared 
14e30 6d 65 6d 6f 72 79 2c 20 53 51 4c 69 74 65 20 64  memory, SQLite d
14e40 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
14e50 0a 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c  .[PRAGMA journal
14e60 5f 6d 6f 64 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f  _mode | journal_
14e70 6d 6f 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20  mode=WAL] .on a 
14e80 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74  network filesyst
14e90 65 6d 20 77 68 65 6e 20 63 6c 69 65 6e 74 73 20  em when clients 
14ea0 61 72 65 20 6f 6e 20 64 69 66 66 65 72 65 6e 74  are on different
14eb0 20 6d 61 63 68 69 6e 65 73 2e 0a 41 6c 6c 20 75   machines..All u
14ec0 73 65 72 73 20 6f 66 20 74 68 65 20 64 61 74 61  sers of the data
14ed0 62 61 73 65 20 6d 75 73 74 20 62 65 20 61 62 6c  base must be abl
14ee0 65 20 74 6f 20 73 68 61 72 65 20 74 68 65 20 73  e to share the s
14ef0 61 6d 65 20 6d 65 6d 6f 72 79 2e 3c 2f 70 3e 0a  ame memory.</p>.
14f00 0a 3c 70 3e 54 68 65 20 70 75 72 70 6f 73 65 20  .<p>The purpose 
14f10 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
14f20 20 69 73 20 74 6f 20 61 6e 73 77 65 72 20 74 68   is to answer th
14f30 69 73 20 71 75 65 73 74 69 6f 6e 20 71 75 69 63  is question quic
14f40 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  kly:</p>..<block
14f50 71 75 6f 74 65 3e 3c 69 3e 0a 47 69 76 65 6e 20  quote><i>.Given 
14f60 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50 20  a page number P 
14f70 61 6e 64 20 61 20 6d 61 78 69 6d 75 6d 20 57 41  and a maximum WA
14f80 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 4d 2c  L frame index M,
14f90 0a 72 65 74 75 72 6e 20 74 68 65 20 6c 61 72 67  .return the larg
14fa0 65 73 74 20 57 41 4c 20 66 72 61 6d 65 20 69 6e  est WAL frame in
14fb0 64 65 78 20 66 6f 72 20 70 61 67 65 20 50 20 74  dex for page P t
14fc0 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 63  hat does not exc
14fd0 65 65 64 20 4d 2c 20 0a 6f 72 20 72 65 74 75 72  eed M, .or retur
14fe0 6e 20 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 20  n NULL if there 
14ff0 61 72 65 20 6e 6f 20 66 72 61 6d 65 73 20 66 6f  are no frames fo
15000 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f  r page P that do
15010 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2e 0a 3c   not exceed M..<
15020 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  /i></blockquote>
15030 0a 0a 3c 70 3e 54 68 65 20 3c 69 3e 4d 3c 2f 69  ..<p>The <i>M</i
15040 3e 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 70  > value in the p
15050 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
15060 68 20 69 73 20 74 68 65 20 22 6d 78 46 72 61 6d  h is the "mxFram
15070 65 22 20 76 61 6c 75 65 0a 64 65 66 69 6e 65 64  e" value.defined
15080 20 69 6e 20 5b 57 41 4c 20 72 65 61 64 20 61 6c   in [WAL read al
15090 67 6f 72 69 74 68 6d 20 7c 20 73 65 63 74 69 6f  gorithm | sectio
150a0 6e 20 34 2e 34 5d 20 74 68 61 74 20 69 73 20 72  n 4.4] that is r
150b0 65 61 64 20 61 74 20 74 68 65 20 73 74 61 72 74  ead at the start
150c0 20 0a 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69   .of a transacti
150d0 6f 6e 20 61 6e 64 20 77 68 69 63 68 20 64 65 66  on and which def
150e0 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ines the maximum
150f0 20 66 72 61 6d 65 20 66 72 6f 6d 20 74 68 65 20   frame from the 
15100 57 41 4c 20 74 68 61 74 20 0a 74 68 65 20 72 65  WAL that .the re
15110 61 64 65 72 20 77 69 6c 6c 20 75 73 65 2e 3c 2f  ader will use.</
15120 70 3e 0a 0a 3c 70 3e 54 68 65 20 77 61 6c 2d 69  p>..<p>The wal-i
15130 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e  ndex is transien
15140 74 2e 20 20 41 66 74 65 72 20 61 20 63 72 61 73  t.  After a cras
15150 68 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  h, the wal-index
15160 20 69 73 0a 72 65 63 6f 6e 73 74 72 75 63 74 65   is.reconstructe
15170 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69  d from the origi
15180 6e 61 6c 20 57 41 4c 20 66 69 6c 65 2e 20 20 5e  nal WAL file.  ^
15190 54 68 65 20 56 46 53 20 69 73 20 72 65 71 75 69  The VFS is requi
151a0 72 65 64 0a 74 6f 20 65 69 74 68 65 72 20 74 72  red.to either tr
151b0 75 6e 63 61 74 65 20 6f 72 20 7a 65 72 6f 20 74  uncate or zero t
151c0 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
151d0 20 77 61 6c 2d 69 6e 64 65 78 20 77 68 65 6e 20   wal-index when 
151e0 74 68 65 20 6c 61 73 74 0a 63 6f 6e 6e 65 63 74  the last.connect
151f0 69 6f 6e 20 74 6f 20 69 74 20 63 6c 6f 73 65 73  ion to it closes
15200 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 77  .  Because the w
15210 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72 61 6e  al-index is tran
15220 73 69 65 6e 74 2c 20 69 74 20 63 61 6e 0a 75 73  sient, it can.us
15230 65 20 61 6e 20 61 72 63 68 69 74 65 63 74 75 72  e an architectur
15240 65 2d 73 70 65 63 69 66 69 63 20 66 6f 72 6d 61  e-specific forma
15250 74 3b 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 68  t; it does not h
15260 61 76 65 20 74 6f 20 62 65 20 63 72 6f 73 73 2d  ave to be cross-
15270 70 6c 61 74 66 6f 72 6d 2e 0a 48 65 6e 63 65 2c  platform..Hence,
15280 20 75 6e 6c 69 6b 65 20 74 68 65 20 64 61 74 61   unlike the data
15290 62 61 73 65 20 61 6e 64 20 57 41 4c 20 66 69 6c  base and WAL fil
152a0 65 20 66 6f 72 6d 61 74 73 20 77 68 69 63 68 20  e formats which 
152b0 73 74 6f 72 65 20 61 6c 6c 20 76 61 6c 75 65 73  store all values
152c0 0a 61 73 20 62 69 67 20 65 6e 64 69 61 6e 2c 20  .as big endian, 
152d0 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 73 74  the wal-index st
152e0 6f 72 65 73 20 6d 75 6c 74 69 2d 62 79 74 65 20  ores multi-byte 
152f0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6e 61  values in the na
15300 74 69 76 65 0a 62 79 74 65 20 6f 72 64 65 72 20  tive.byte order 
15310 6f 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70  of the host comp
15320 75 74 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  uter.</p>..<p>Th
15330 69 73 20 64 6f 63 75 6d 65 6e 74 20 69 73 20 63  is document is c
15340 6f 6e 63 65 72 6e 65 64 20 77 69 74 68 20 74 68  oncerned with th
15350 65 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61  e persistent sta
15360 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  te of the databa
15370 73 65 0a 66 69 6c 65 2c 20 61 6e 64 20 73 69 6e  se.file, and sin
15380 63 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  ce the wal-index
15390 20 69 73 20 61 20 74 72 61 6e 73 69 65 6e 74 20   is a transient 
153a0 73 74 72 75 63 74 75 72 65 2c 20 6e 6f 20 66 75  structure, no fu
153b0 72 74 68 65 72 20 0a 69 6e 66 6f 72 6d 61 74 69  rther .informati
153c0 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
153d0 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  mat of the wal-i
153e0 6e 64 65 78 20 77 69 6c 6c 20 62 65 20 70 72 6f  ndex will be pro
153f0 76 69 64 65 64 20 68 65 72 65 2e 0a 43 6f 6d 70  vided here..Comp
15400 6c 65 74 65 20 64 65 74 61 69 6c 73 20 6f 6e 20  lete details on 
15410 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
15420 65 20 77 61 6c 2d 69 6e 64 65 78 20 61 72 65 20  e wal-index are 
15430 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
15440 0a 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 53 51 4c  .comments in SQL
15450 69 74 65 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  ite source code.
15460 3c 2f 70 3e 0a                                   </p>.